2012-04-20 12 views
3

Gmailアプリケーションでは、左のフラグメントから電子メールを選択すると、電子メールが通常のように右側のフラグメントに開きます。デバイスを縦向きに回転させると、選択した電子メールのみが表示され、デバイスを横向きに戻すと、電子メールリストと選択した電子メールが再度表示されます。それはすべて期待されており、完璧に動作します。フラグメントとローテーション

ただし、左のフラグメントリストからアイテムを選択した後で右のフラグメントに表示されたAPIデモとアプリケーションでは、デバイスのポートレートを回転させるとリストのフラグメントが表示されますGmailのような選択したアイテムの詳細フラグメントのランドスケープに戻ると、選択したアイテムが右側のフラグメントに再び表示されます。

APIデモのサンプルコード:http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.html

私はGmailアプリに示されたものを再作成することができますどのように任意のアイデア?

答えて

2

ジョン・Oは、私の答えを正しい方向に押し出しました。実際に肖像画に、XMLのみリスト・フラグメントを示した:私は詳細フラグメントにこれを変更した場合は、リストからの項目がまだ選択されていないよう

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" android:layout_height="match_parent"> 
<fragment class="com.dixon.blah.Events$EventsListFragment" 
     android:id="@+id/titles" 
     android:layout_width="match_parent" android:layout_height="match_parent" /> 
</FrameLayout> 

しかし、私はFCを取得します。リスト内の項目は、フラグメントのビューに、detailsFrame変数ポイントを選択したら

if(detailsFrame != null) { 
      Intent intent = new Intent(); 
      intent.setClass(this, EventDetailsActivity.class); 
      intent.putExtra("index", mCurCheckPosition); 
      intent.putExtra("id", mSelectedId); 
      startActivity(intent); 
} 

:私は私のFragmentActivityのonCreateメソッドに以下のコードを配置して、この周りを得ました。したがって、細部の断片の肖像画の回転から、風景に戻って、再びビューが残り、正しく表示されます。

3

は、私はあなたのポートレートモード用(ActivityためcontentViewとして設定されている)/res/layout/fragment_layout.xmlで顔をしている場合、あなたは<fragment>タグにリスト・フラグメントの代わりに、細部フラグメントへの参照を見つけることが疑われます。

リストフラグメントの代わりに詳細フラグメントを参照するように切り替えると、正しいトラックに移動します。

これまで説明したレイアウトスイッチを使用した場合と同じようにロジックを正しく動作させるには、コードを掘り下げなければならないかもしれませんが、それは始める場所です。

あなたは別の問題に遭遇します(これは、私が実行しなければならないので、私はこれを私の答えに追加したいと思っていますが、まだ考えていません)。これは、 Landscapeでは、両方のフラグメントが並んでいると思われます。これはポートレイトのリスト断片に対応します。リスト内のアイテムを選択すると、予想されるポートレートの振る舞いを他のフラグメントを表示するように切り替える必要があります。したがって、おそらくブール値mIsItemSelectedを保持し、Activityコンストラクタで使用して、表示するポートレート・レイアウト/フラグメント・ペアを選択しますまたは詳細)。

関連する問題