3

Gmailアプリでは、左側のフラグメントからメールを選択すると、通常どおり右側のフラグメントのメールが開きます。デバイスを縦向きに回転すると、予想どおりに選択した電子メールのみが表示され、デバイスを横向きに回転すると、電子メールリストと選択した電子メールの両方が再び表示されます。それはすべて期待されており、完全に機能します。

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

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

Gmailアプリに表示されているものをどのように再現できますか?

4

2 に答える 2

3

/res/layout/fragment_layout.xmlポートレート モードの( の として設定されてcontentViewいる) を参照すると、詳細フラグメントではなくリスト フラグメントへの参照がタグに含まActivityれていることがわかると思います。<fragment>

リストフラグメントではなく詳細フラグメントを参照するようにこれを切り替えると、正しい軌道に乗ることができます。

先ほど述べたレイアウト スイッチを指定して、ロジックを希望どおりに正確に機能させるには、コードを掘り下げる必要があるかもしれませんが、それが出発点です。

あなたは別の問題に遭遇するでしょう(私は実行しなければならないので、これを私の答えに追加したかったのですが、まだ考えていません)それは、ランドスケープでアクティビティを最初に起動したときにおそらく、両方のフラグメントを並べて表示する必要があります。これは、縦向きのリスト フラグメントに対応します。リスト内のアイテムを選択するには、予想される縦向きの動作を他のフラグメントを表示するように切り替える必要があります...したがって、ブール値を保持し、コンストラクターmIsItemSelectedでそれを使用して、表示する縦向きレイアウト/フラグメントのペア (リストまたはActivity詳細)。

于 2012-04-20T21:00:27.247 に答える
2

Jon 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 が取得されます。以下のコードを FragmentActivity onCreate メソッドに配置することで、これを回避しました。

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

リスト内の項目が選択されると、detailsFrame 変数がフラグメントのビューを指します。したがって、詳細フラグメントの縦向きの回転から横向きに、そして再びビューが残り、正しく表示されます。

于 2012-04-20T23:19:03.087 に答える