2012-08-02 10 views
5

Zajmuję się tworzeniem aplikacji Android wykorzystującej fragmenty, która jest bardziej formą Master/Detail. Chcę, aby główna czynność składała się z fragmentu listy po lewej stronie, w oparciu o element wybrany po lewej stronie, chcę wyświetlić fragment z innym układem po prawej stronie. (Uwaga: każdy fragment po prawej stronie wymaga różnych układów/widoków)Jak zamieniać fragmenty o różnych układach w systemie Android?

Wszystkie przykłady, z którymi miałem do czynienia, wykorzystują tylko jeden wspólny fragment po prawej stronie, zmieniając niektóre wartości w nim lub zamieniając/zastępując nowe fragmenty o tym samym układzie.

Jeśli ktoś może rzucić trochę światła na ten problem, to pomoże mi to niezmiernie. Dzięki!

Odpowiedz

9

Jeśli używasz framelayouts do przechowywania swoich fragmentów, jest taki sam, jak te, o których wspomniałeś. Po prostu stwórz swój fragment (bez względu na układ) i zamień go na framelayout zamiast drugiego.

Jeśli zakodowałeś na stałe swoje fragmenty w pliku XML, nie będziesz mógł tego zrobić (o ile udało mi się ustalić).

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/frames" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_above="@id/hline1" 
    android:layout_below="@id/horizontalline" 
    android:orientation="horizontal" > 
    <FrameLayout 
     android:id="@+id/leftpane" 
     android:layout_width="0px" 
     android:layout_height="match_parent" 
     android:layout_weight=".4" /> 
    <TextView 
     android:id="@+id/verticalline" 
     android:layout_width="2dp" 
     android:layout_height="match_parent" 
     android:background="@color/bar_background" 
     android:gravity="center_horizontal" 
     android:paddingLeft="5dip" 
     android:paddingRight="5dip" /> 
    <FrameLayout 
     android:id="@+id/rightpane" 
     android:layout_width="0px" 
     android:layout_height="match_parent" 
     android:layout_weight="1" > 
    </FrameLayout> 
</LinearLayout> 

Następnie należy użyć identyfikatora dla framelayout oraz nazwę swojego wystąpienia fragmentu umieścić fragment do framelayout.

EventListFragment eventlist = new EventListFragment(); 
getFragmentManager().beginTransaction().replace(R.id.leftpane, eventlist).commit(); 

EventDetailFragment eventadd = new EventDetailFragment(); 
getFragmentManager().beginTransaction().replace(R.id.rightpane, eventadd).commit(); 

Gdy chcesz zmienić zawartość, ponownie zrobić to samo (co następuje zastąpi fragment w prawym panelu z nowego/innego fragmentu, który może mieć swój własny, odmienny, układ związany z it):

EventSuperDetailFragment eventsuper = new EventSuperDetailFragment(); 
getFragmentManager().beginTransaction().replace(R.id.rightpane, eventsuper).commit(); 
+0

Bardzo dziękuję za pomoc! Koncepcja fragmentów jest dla mnie zupełnie nowa. Czy mógłbyś zilustrować swój punkt za pomocą prostego przykładu? –

+0

Zaktualizowałem swoją odpowiedź, mam nadzieję, że wskaże ci to właściwy kierunek. Daj mi znać! – Barak

+0

Dzięki Barak !!! Tak, zadziałało! Chciałem też wiedzieć, czy możliwe jest stworzenie fragmentu w obrębie fragmentu. –

Powiązane problemy