2013-07-05 17 views
10

Tôi đang gặp một vấn đề thực sự kỳ lạ. Tôi có một đoạn chung được thêm vào trong hầu hết mọi hoạt động của ứng dụng của tôi. Đoạn này cho thấy một phiên bản nhỏ của thanh trình phát. Vì vậy, nó nghe một số chương trình phát sóng để cập nhật tên nhạc hiện tại và có một số điều khiển, như phát/tạm dừng.Nhận được "Fragment không tạo ra một cái nhìn" sau khi adition của Fragment khác mà không cần UI

Như tôi đã nói, tôi thêm đoạn này vào hầu hết mọi hoạt động trong ứng dụng của mình và tôi chưa bao giờ gặp bất kỳ vấn đề nào với nó. Nhưng bây giờ, tôi cần tạo một Fragment mới không có UI và được giữ lại (setRetainInstance (true)). Sau khi yêu cầu mảnh vỡ mới này, mọi thứ dường như ổn. Cho đến khi tôi xoay thiết bị và hoạt động bị hỏng.

Vì vậy, tìm trong nhật ký, tôi thấy các ngoại lệ sau đây:

07-05 14:10:23.818: ERROR/AndroidRuntime(25922): FATAL EXCEPTION: main 
     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.soongz/com.soongz.ui.PlaylistActivity}: android.view.InflateException: Binary XML file line #13: Error inflating class fragment 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 
     at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3576) 
     at android.app.ActivityThread.access$800(ActivityThread.java:140) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1243) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:137) 
     at android.app.ActivityThread.main(ActivityThread.java:4921) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794) 
     at dalvik.system.NativeStart.main(Native Method) 
     Caused by: android.view.InflateException: Binary XML file line #13: Error inflating class fragment 
     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:313) 
     at com.actionbarsherlock.internal.ActionBarSherlockNative.setContentView(ActionBarSherlockNative.java:119) 
     at com.actionbarsherlock.app.SherlockFragmentActivity.setContentView(SherlockFragmentActivity.java:262) 
     at net.simonvt.menudrawer.MenuDrawer.setContentView(MenuDrawer.java:964) 
     at com.soongz.ui.BaseComMenuActivity.setContentViewComMenu(BaseComMenuActivity.java:31) 
     at com.soongz.ui.PlaylistActivity.createView(PlaylistActivity.java:111) 
     at br.com.cybereagle.androidlibrary.ui.EagleActivity.onCreate(EagleActivity.java:57) 
     at android.app.Activity.performCreate(Activity.java:5206) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074) 
     ... 12 more 
     Caused by: java.lang.IllegalStateException: Fragment com.soongz.ui.fragment.PlayerReduzidoFragment did not create a view. 
     at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:303) 
     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:676) 
     ... 26 more 

ngoại lệ này đang xảy ra trong Fragment đó là đã có trong hoạt động, thay vì xảy ra trong Fragment mới. Nếu tôi loại bỏ đoạn với phiên bản nhỏ của thanh trình phát và giữ Mảnh mới không có Giao diện người dùng, mọi thứ sẽ hoạt động bình thường. Nó cũng hoạt động nếu tôi chỉ giữ mảnh cũ và loại bỏ mảnh mới.

Thêm chi tiết: Đoạn cũ được thêm vào thông qua XML bố cục. Đây là XML của Hoạt động:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"> 

    <fragment 
     android:name="com.soongz.ui.fragment.ListaDeMusicasFragment" 
     android:id="@+id/lista_de_musicas_fragment" 
     style="?layoutListViewMusicas" /> 

    <fragment 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:name="com.soongz.ui.fragment.PlayerReduzidoFragment"/> 
</LinearLayout> 

Đoạn mới (wih không UI) được thêm vào trong các cách sau:

FragmentManager fragmentManager = getSupportFragmentManager(); 
operacoesEmBackgroundFragment = (OperacoesEmBackgroundFragment) fragmentManager.findFragmentByTag(TAG_OPERACOES_EM_BACKGROUND_FRAGMENT); 

if(operacoesEmBackgroundFragment == null){ 
    operacoesEmBackgroundFragment = new OperacoesEmBackgroundFragment(); 
    fragmentManager.beginTransaction() 
      .add(operacoesEmBackgroundFragment, TAG_OPERACOES_EM_BACKGROUND_FRAGMENT) 
      .commit(); 
} 

Cảm ơn trước cho bất cứ ai có thể giúp tôi.

UPDATE:

tôi loại bỏ các setRetainInstance (true) từ đoạn không có giao diện người dùng để xem nếu vấn đề có liên quan đến này. Nhưng vấn đề vẫn đang xảy ra.

Trả lời

17

Ôi Chúa ơi, tôi không thể tin được. Tôi giải quyết vấn đề của tôi chỉ cần thiết lập ID của mảnh đó đã có vấn đề.

Bây giờ, bố trí của XML của hoạt động là như thế này:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"> 

    <fragment 
     android:name="com.soongz.ui.fragment.ListaDeMusicasFragment" 
     android:id="@+id/lista_de_musicas_fragment" 
     style="?layoutListViewMusicas" /> 

    <fragment 
     android:id="@+id/player_reduzido_fragment" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:name="com.soongz.ui.fragment.PlayerReduzidoFragment"/> 
</LinearLayout> 

Tôi không biết tại sao. Nó phải là một lỗi.

+4

Nếu bạn đang thêm phân đoạn theo chương trình thông qua FragmentTransaction, hãy đảm bảo cung cấp vùng chứa phân đoạn của bạn Xem id. Ngoài ra @ FernandoCamargo tôi không thể mô tả tôi cảm ơn vì sự cố này nhanh chóng như thế nào, cảm ơn bạn. –