android throw Строка двоичного файла xml InflateException: ошибка раздувания фрагмента класса

У меня есть класс Activity, который реализует панель действий с двумя вкладками. Каждая вкладка вызывает другой фрагмент??.class над TabListener. Если я запускаю приложение, вызывается FragmentXY.class. Я могу переключиться на вторую вкладку без каких-либо проблем. Но если я вернусь к первой вкладке, которая содержит два других фрагмента в виде разделенного экрана, приложение выйдет из строя и выдаст строку двоичного xml-файла Error: InflateException: Ошибка раздувания фрагмента класса

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);

Каждый Fragment.class вызывает ресурс xml, который содержит один раз два других фрагмента или только один фрагмент.

ФрагментXY.класс

@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>

Это проблема с методом обратного вызова?

Вот полный отчет об ошибке от 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

person user1666438    schedule 12.09.2012    source источник
comment
Пожалуйста, опубликуйте все свои ошибки LogCat.   -  person Sam    schedule 12.09.2012


Ответы (4)


просто расширяет ваш класс, расширяет FragmentActivity

вместо расширяет активность

person Sushant Patekar    schedule 25.04.2013

Я столкнулся с той же ошибкой (другая реализация). Основная причина заключалась в том, что представление, возвращенное в расширенном классе фрагмента (то есть возвращенное из метода фрагмента onCreateView()), является недопустимым или вы не реализовали сам метод onCreateView.

В вашем случае проверьте представление, которое вы возвращаете, в com.febro.myfragmenttest.ListFragment и убедитесь, что оно действительно. Я бы предложил установить точку останова в методе onCreateView.

Надеюсь это поможет.

person kenj    schedule 15.10.2012

<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>

В этом теге у вас есть и android:name, и class, установленные на одно и то же. Поскольку они сопоставляются с одним и тем же, вы должны использовать только один. Вот почему это появилось в трассировке стека:

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

В Fragment руководстве по Android они взаимозаменяемо используются для одной и той же цели.

person Alex Gittemeier    schedule 23.01.2013

Вы должны написать

super.onCreateView(inflater, container, savedInstanceState); 

в вашем методе onCreateView.

person Analizer    schedule 08.03.2013
comment
Он раздувает собственное представление, а не использует onCreateView - person Adam; 07.08.2013