2013-07-05 8 views
10

私は本当に奇妙な問題を抱えています。私は、アプリケーションのほぼすべてのアクティビティに追加される共通の断片を持っています。この断片は、プレイヤーバーの小さなバージョンを示しています。そこで、現在の音楽の名前を更新するためにいくつかの放送を聴き、再生/一時停止のようないくつかのコントロールを持っています。UIなしの他のフラグメントの追加後に「フラグメントがビューを作成しませんでした」

私が言ったように、私は私のアプリのほぼすべての活動でこの断片を追加し、私はそれに何ら問題はなかった。しかし今、UIを持たず、保持されている新しいフラグメントを作成する必要がありました(setRetainInstance(true))。この新しい断片を追加した後は、すべてが大丈夫だったようです。デバイスを回転させてアクティビティがクラッシュするまで。

ので、ログに見て、私は次の例外を参照してください。

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 

をこの例外は、活動中にすでにだった断片で起こって、代わりに新しいフラグメントで起こっています。小さなバージョンのプレーヤーバーでフラグメントを削除し、UIなしで新しいフラグメントを保持すると、すべて正常に動作します。私は古い断片を残して新しい断片を取り除いても機能します。

詳細: 古いフラグメントがレイアウトXML経由で追加されます。

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

(UIなしWIH)新しいフラグメントは、次のように追加されます:私を助けることができる人のため事前に

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

おかげでここでの活動のXMLです。

UPDATE:

私はこの問題は、これに関連しているかどうかを確認しないUIと断片からsetRetainInstance(true)を除去します。しかし、問題はまだ発生しています。

答えて

17

ああ私の神、私はそれを信じることができません。私は問題を抱えていた断片のIDを設定するだけで、私の問題を解決しました。

さて、活動のXMLのレイアウトは、このようなものです:

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

私は理由を知りません。それはバグでなければなりません。

+4

フラグメントをプログラムでFragmentTransaction経由で追加する場合は、フラグメントコンテナViewにIDを渡してください。また、@ FernandoCamargo私はこの素早い修正のためにどれほど感謝しているか記述することはできません、ありがとうございます。 –

関連する問題