2012-09-12 8 views
6

Otrzymałem klasę aktywności, która implementuje pasek czynności z dwiema zakładkami. Każda karta wywołuje inną klasę Fragment ??. Nad TabListener. Jeśli uruchomię aplikację, wywoływana jest klasa FragmentXY.class. Mogę bez problemu przełączać się na drugą kartę. Ale jeśli mogę przełączyć z powrotem do pierwszej zakładki, która zawiera dwa inne fragmenty jako split-screen, aplikacja zawieszała się i rzucać się błąd: InflateException binarny liniowy plik xml: Błąd pompowania klasy fragmentWyrzucenie androida InflateException binarna linia pliku xml: Błąd pompowania fragmentu klasy

tab = actionBar 
    .newTab() 
    .setText("My Box") 
    .setIcon(android.R.drawable.ic_menu_help) 
    .setTabListener(new MyTabListener<FragmentXY>(this, "myXY",FragmentXY.class)); 
    actionBar.addTab(tab); 

tab = actionBar 
    .newTab() 
    .setText("QR-Code") 
    .setIcon(android.R.drawable.ic_menu_add) 
    .setTabListener(new MyTabListener<FragmentXYZ>(this, "barcode",FragmentXYZ.class)); 

actionBar.addTab(tab); 

Każdy Fragment.class wywołuje zasób xml, który zawiera dwa inne fragmenty lub tylko jeden Fragment.

FragmentXY.class

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.first_tab, container, false); 
     return view; 
    } 

first_tab.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" > 
    <fragment 
     android:name="com.febro.myfragmenttest.ListFragment" 
     android:id="@+id/listFragment" 
     android:layout_width="250dp" 
     android:layout_height="match_parent" 
     android:layout_marginTop="?android:attr/actionBarSize" 
     class="com.febro.myfragmenttest.ListFragment" ></fragment> 

    <fragment 
     android:name="com.febro.myfragmenttest.DetailFragment" 
     android:id="@+id/detailFragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     class="com.febro.myfragmenttest.DetailFragment" > 
    </fragment> 

</LinearLayout> 

Czy to problem z Callback-Methode?

Oto pełny raport o błędzie z LogCat:

09-12 19:57:06.300: D/AndroidRuntime(2799): Shutting down VM 
09-12 19:57:06.300: W/dalvikvm(2799): threadid=1: thread exiting with uncaught exception (group=0x4015d760) 
09-12 19:57:06.310: E/AndroidRuntime(2799): FATAL EXCEPTION: main 
09-12 19:57:06.310: E/AndroidRuntime(2799): android.view.InflateException: Binary XML file line #6: Error inflating class fragment 
09-12 19:57:06.310: E/AndroidRuntime(2799):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:688) 
09-12 19:57:06.310: E/AndroidRuntime(2799):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:724) 
09-12 19:57:06.310: E/AndroidRuntime(2799):  at android.view.LayoutInflater.inflate(LayoutInflater.java:479) 
09-12 19:57:06.310: E/AndroidRuntime(2799):  at android.view.LayoutInflater.inflate(LayoutInflater.java:391) 
09-12 19:57:06.310: E/AndroidRuntime(2799):  at com.febro.myfragmenttest.FragmentXY.onCreateView(FragmentXY.java:26) 
09-12 19:57:06.310: E/AndroidRuntime(2799):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:776) 
09-12 19:57:06.310: E/AndroidRuntime(2799):  at android.app.FragmentManagerImpl.attachFragment(FragmentManager.java:1133) 
09-12 19:57:06.310: E/AndroidRuntime(2799):  at android.app.BackStackRecord.run(BackStackRecord.java:628) 
09-12 19:57:06.310: E/AndroidRuntime(2799):  at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1309) 
09-12 19:57:06.310: E/AndroidRuntime(2799):  at android.app.FragmentManagerImpl$1.run(FragmentManager.java:398) 
09-12 19:57:06.310: E/AndroidRuntime(2799):  at android.os.Handler.handleCallback(Handler.java:587) 
09-12 19:57:06.310: E/AndroidRuntime(2799):  at android.os.Handler.dispatchMessage(Handler.java:92) 
09-12 19:57:06.310: E/AndroidRuntime(2799):  at android.os.Looper.loop(Looper.java:132) 
09-12 19:57:06.310: E/AndroidRuntime(2799):  at android.app.ActivityThread.main(ActivityThread.java:4126) 
09-12 19:57:06.310: E/AndroidRuntime(2799):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-12 19:57:06.310: E/AndroidRuntime(2799):  at java.lang.reflect.Method.invoke(Method.java:491) 
09-12 19:57:06.310: E/AndroidRuntime(2799):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844) 
09-12 19:57:06.310: E/AndroidRuntime(2799):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 
09-12 19:57:06.310: E/AndroidRuntime(2799):  at dalvik.system.NativeStart.main(Native Method) 
09-12 19:57:06.310: E/AndroidRuntime(2799): Caused by: java.lang.IllegalArgumentException: Binary XML file line #6: Duplicate id 0x7f090008, tag null, or parent id 0xffffffff with another fragment for com.febro.myfragmenttest.ListFragment 
09-12 19:57:06.310: E/AndroidRuntime(2799):  at android.app.Activity.onCreateView(Activity.java:4182) 
09-12 19:57:06.310: E/AndroidRuntime(2799):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:664) 
09-12 19:57:06.310: E/AndroidRuntime(2799):  ... 18 more 
09-12 19:57:06.320: W/ActivityManager(302): Force finishing activity com.febro.myfragmenttest/.ActionbarMain 
09-12 19:57:06.400: D/dalvikvm(302): GC_FOR_ALLOC freed 13157K, 52% free 12567K/26055K, paused 68ms 
+0

proszę umieszczać wszystkie swoje błędy logcat. – Sam

Odpowiedz

0

Zabrakło mi do tego samego błędu (inny realizacji). Przyczyną leżącą u podstaw jest to, że widok zwrócony w zawyżonej klasie fragmentów (tj. Zwrócony z metody onCreateView() fragmentu) jest nieprawidłowy lub nie zaimplementowano samej metody onCreateView.

W twoim przypadku sprawdź widok, który powracasz w com.febro.myfragmenttest.ListFragment i sprawdź, czy jest poprawny. Proponuję ustawienie punktu przerwania w metodzie onCreateView.

Mam nadzieję, że to pomoże.

0
<fragment 
    android:name="com.febro.myfragmenttest.ListFragment" 
    android:id="@+id/listFragment" 
    android:layout_width="250dp" 
    android:layout_height="match_parent" 
    android:layout_marginTop="?android:attr/actionBarSize" 
    class="com.febro.myfragmenttest.ListFragment" ></fragment> 

W tym tagu masz zarówno android: name i class ustawione na to samo. Ponieważ te mapy do tego samego, powinieneś używać tylko jednego. To dlatego ten pojawił się w ślad stosu:

java.lang.IllegalArgumentException: Binary XML file line #6: *Duplicate id* .... 

W Fragment android przewodnikiem, oni z nich korzystać zamiennie w tym samym celu.

-1

Trzeba napisać

super.onCreateView(inflater, container, savedInstanceState); 

w swojej metodzie onCreateView.

+0

Nadpisuje własny widok, zamiast używać OnCreateView – Adam

4

prostu rozciąga klasa rozszerza FragmentActivity

zamiast przedłuża aktywność

+0

. Zostało to opracowane dla mnie. –

Powiązane problemy