2013-10-18 18 views
37

Ich baue ein Layout für große Bildschirme, das aus zwei verschiedenen Teilen bestehen soll, einem linken und einem rechten. Dafür war ich der Meinung, dass die Verwendung von 2 Fragmenten die richtige Wahl ist.Android: Wann/warum sollte ich FrameLayout anstelle von Fragment verwenden?

Dann habe ich mir das Beispiel der Navigation mit dem Master/Detail-Flow angesehen. Es hat ein 2-Scheiben-Layout, wobei rechts die Navigation und links die Detailansicht angezeigt wird.

Aber in diesem Beispiel, anders als ich dort für die Detailansicht zu sehen erwartet, ist ein FrameLayout, die dann eine Fragment direkt anstelle eines Fragment hält.

Das Layout XML sieht wie folgt aus (ein Beispiel):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_marginLeft="16dp" 
    android:layout_marginRight="16dp" 
    android:baselineAligned="false" 
    android:divider="?android:attr/dividerHorizontal" 
    android:orientation="horizontal" 
    android:showDividers="middle" 
    tools:context=".WorkStationListActivity" > 

    <fragment 
     android:id="@+id/workstation_list" 
     android:name="de.tuhh.ipmt.ialp.history.WorkStationListFragment" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     tools:layout="@android:layout/list_content" /> 

    <FrameLayout 
     android:id="@+id/workstation_detail_container" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="3" /> 

</LinearLayout> 

Meine Frage ist nun: Warum ist ein FrameLayout anstelle des Fragment selbst für die Detailansicht verwendet? Was ist der Grund oder der Vorteil? Soll ich es auch benutzen?

Antwort

36

Der Detailcontainer ist ein FrameLayout, da das Fragment, das angezeigt wird, mit FragmentTransactionreplace() Methode ersetzt wird.

Das erste Argument zu replace() ist die ID des Containers, dessen Fragmente ersetzt werden. Wenn das FrameLayout in diesem Beispiel durch ein Fragment ersetzt würde, würde sowohl das WorkStationListFragment als auch das aktuell angezeigte Fragment durch das neue Fragment ersetzt werden. Durch die Kapselung des Fragments in einem FrameLayout können Sie nur die Details ersetzen.

+0

Dies half in der Tat. In meinem Fall muss ich das Fragment nicht ersetzen, also weiß ich jetzt, dass ich das 'FrameLayout' herauslassen kann und nur das' Fragment' direkt verwenden kann. – Terry

2

Fügen Sie ein Fragment zu einer Aktivität hinzu, indem Sie <fragment> verwenden, wenn Sie es nicht benötigen, um auf Änderungen in der Benutzeroberfläche zu reagieren. Verwenden Sie andernfalls <FrameLayout> Ein Rahmenlayout ist eine Art von Ansichtsgruppe, mit der ein Bereich auf dem Bildschirm ausgeblendet wird.

Verwandte Themen