2012-09-12 38 views
6

Tôi có một lớp Hoạt động thực hiện Thanh tác vụ với hai Tab. Mỗi Tab đang gọi một Fragment khác ?? lớp trên TabListener. Nếu tôi khởi động ứng dụng, lớp FragmentXY.class sẽ được gọi. Tôi có thể chuyển sang Tab thứ hai mà không gặp bất kỳ vấn đề gì. Nhưng nếu tôi chuyển về Tab đầu tiên, trong đó có hai mảnh khác như một chia màn hình, ứng dụng đã bị rơi và ném Lỗi: InflateException nhị phân dòng tập tin xml: Lỗi khi gia tăng lớp mảnhandroid ném InflateException nhị phân xml dòng tệp: Lỗi lạm phát phân đoạn lớp

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

Mỗi Fragment.class đang gọi một tài nguyên xml có chứa hai đoạn khác hoặc chỉ một mảnh.

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> 

Có một vấn đề với các callback-tole?

Đây là báo cáo lỗi đầy đủ từ 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

Xin vui lòng gửi tất cả các lỗi LogCat của bạn. – Sam

Trả lời

0

Tôi đã gặp phải lỗi tương tự (thực hiện khác nhau). Nguyên nhân cơ bản là vì View được trả về trong lớp fragment fragment (tức là trả về từ phương thức onCreateView() của fragment) không hợp lệ hoặc bạn không thực hiện phương thức onCreateView.

Trong trường hợp của bạn, hãy kiểm tra chế độ xem bạn đang quay lại trong com.febro.myfragmenttest.ListFragment và xác minh rằng nó hợp lệ. Tôi muốn đề nghị thiết lập một breakpoint trong phương thức onCreateView.

Hy vọng điều này sẽ hữu ích.

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> 

Trong thẻ này, bạn có cả android: name và class được đặt thành giống nhau. Vì những bản đồ này giống nhau, bạn chỉ nên sử dụng một bản đồ. Đây là lý do tại sao này xuất hiện trong stack trace:

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

Trong hướng dẫn android Fragment, họ sử dụng những thay thế cho nhau cho cùng một mục đích.

-1

Bạn phải viết

super.onCreateView(inflater, container, savedInstanceState); 

trong phương pháp onCreateView của bạn.

+0

Anh ấy đang tăng lượt xem của riêng mình thay vì sử dụng onCreateView – Adam

4

chỉ đơn giản là mở rộng lớp học của bạn kéo dài FragmentActivity

thay vì mở rộng Hoạt động

+0

Điều này đã hiệu quả đối với tôi. –

Các vấn đề liên quan