2012-02-26 13 views
16

Próbuję zdefiniować układ fragmentu w XML w taki sam sposób, jak zdefiniowałem układ mojego widoku.Jak mogę zdefiniować układ fragmentu z XML?

Czy to możliwe? Próbowałem kilku rzeczy, ale żaden z nich nie działa.

Moja aktywność układ wygląda następująco (main.xml):

<?xml version="1.0" encoding="utf-8"?> 
<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
    <fragment 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:name="full.lommeregner.Lommeregnerrv2Activity" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/lommeregnerv2"> 
    </fragment> 

</ListView> 

Teraz, ponieważ nie jestem wielkim fanem generowania układów poprzez surowego kodu Java, próbowałem definiowanie mój fragment następująco (fragment_lommeregner .xml):

<fragment 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:name="full.lommeregner.Lommeregnerrv2Activity" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/lommeregnerv2"> 
     <!-- my content was located here (some textviews, buttons and so on). --> 
    </fragment> 

Czy robię coś nie tak? Jak mogę zdefiniować układ fragmentu za pomocą XML?

Odpowiedz

15

Fragment działa bardzo podobnie do działania, ponieważ do tego celu potrzebny jest plik klasy Java. nie można utworzyć fragmentu prostu tworząc układ fragment - trzeba klasę do fragmentu:

  1. Tworzenie XML układ i podklasy działania związane z aktywnością
  2. Tworzenie XML układ i podklasę Fragment o swoje fragment
  3. Tie dwa razem w XML układ aktywny (lub za pomocą FragmentTransaction jeśli chcesz to zrobić w kodzie Java)

Jeśli nie zostało to jeszcze zrobione, czytać, ponownie przeczytać i strawić wszystko na tej stronie: https://developer.android.com/guide/components/fragments.html

Jest ich wiele, ale Fragmenty są istotną częścią aplikacji na Androida, więc teraz jest to wymagane. Dobra wiadomość jest taka, że ​​podstawy fragmentów są dość proste.

+1

one nie są ściśle wymagane, ale w wielu przypadkach ułatwią Ci życie. – adamp

+0

Przykład Eclipse, który jest obecnie generowany automatycznie, używa FragmentTransactions, jak sądzę ... widok jest generowany przez statyczną klasę fragmentów i zwracany przez wywołanie funkcjonalne. Obecnie pracuję nad tym, jak dodać własne karty. – anon58192932

+0

W jaki sposób instancja klasy 'Fragment' określa, który plik XML zawiera jego układ? 'Activity' ma' setContentView (R.layout.my_activity_layout) ', które można wywołać podczas' onCreate() '. Czy istnieje odpowiednik fragmentów? – dinosaur

10

Wystarczy dodać do tagu <fragment> jako własność:

tools:layout="@layout/your_layout_xml" 

I w main.xml (lub <fragment> tag kontenera) do kontenera nadrzędnego (w tym przypadku ListView):

xmlns:tools="http://schemas.android.com/tools" 
Powiązane problemy