Android: Master / Detail-Flow (Doppelfenster) mit 1 Aktivität

Wie berichtet von derAndroid-Anleitung, Doppelscheibe kann auf zwei Arten erreicht werden:

Mehrere Fragmente,einer AktivitätMehrere Fragmente,mehrere Aktivitäten

Ich benutze dieerster Fall (Die Android-Anleitung erklärt nur den zweiten Fall).

Dies ist, was passiert7 "Tabletten:

drehenvon der Landschaft zum Porträt: Nur das Einzelfensterfragment wird neu erstelltdrehenvom Porträt zur Landschaft: Alle 3 Fragmente (Einzelfenster, Doppelfenster-Master, Doppelfenster-Detail) werden neu erstellt

Frage:Warum ist das Einscheibenfragment (die ich programmgesteuert erstelle, aber mit einem im Layout definierten FrameLayout als Container)auf Dual-Fenster neu erstellt werden?

Ich berichte unter meiner Implementierung:

/layout/activity_main.xml:

<FrameLayout
    android:id="@+id/single_pane"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

/layout-w900dp/activity_main.xml:

<LinearLayout
    android:id="@+id/dual_pane"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment class="com.example.MasterFragment"
        android:id="@+id/master_dual"
        android:tag="MASTER_FRAGMENT_DUAL_PANE"
        android:layout_width="@dimen/master_frag_width"
        android:layout_height="match_parent"/>
    <fragment class="com.example.DetailFragment"
        android:id="@+id/detail_dual"
        android:tag="DETAIL_FRAGMENT_DUAL_PANE"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

Dies ist dasonCreate in der Haupttätigkeit:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mDualPane = findViewById(R.id.dual_pane)!=null;

    FragmentManager fm = getFragmentManager();
    if (savedInstanceState==null) {
        // this is a non-UI fragment I am using for data processing purposes
        fm.beginTransaction().add(new NonUiFragment(), DATA_FRAGMENT).commit();
    }
    if (!mDualPane && fm.findFragmentById(R.id.single_pane)==null) {
        fm.beginTransaction().add(R.id.single_pane, new MasterFragment(), MASTER_FRAGMENT_SINGLE_PANE).commit();
    }
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage