1

FragmentTransition を使用して空の FrameLayout に新しいフラグメントを追加しようとしていますが、次の例外が引き続き発生します。

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
     at android.view.ViewGroup.addViewInner(ViewGroup.java:2840)
     at android.view.ViewGroup.addView(ViewGroup.java:2735)
     at android.view.ViewGroup.addView(ViewGroup.java:2691)
     at android.view.ViewGroup.addView(ViewGroup.java:2671)
     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:739)
     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:919)
     at android.app.BackStackRecord.run(BackStackRecord.java:578)
     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1217)
     at android.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:384)
     at android.someApp.OverviewListFragment.showDetailsForSelectedMessage(OverviewListFragment.java:67)

デバッグ中に、FrameLayout がそれ自体を独自の子として追加しようとしていることに気付きました。これがこの例外を引き起こしているようです。

フラグメントを追加しようとしているアクティビティの layout.xml ファイルは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent" 
    android:layout_height="match_parent">

    <fragment 
        android:name="android.someApp.OverviewListFragment"
        android:id="@+id/overview_list_fragment" 
        android:layout_weight="0.3"
        android:layout_width="0px" 
        android:layout_height="match_parent" />

    <FrameLayout 
        android:id="@+id/scenario_details_container" 
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:background="?android:attr/detailsElementBackground"/>

</LinearLayout>

移行を実行しようとしている場所は次のとおりです。

private void showDetailsForSelectedMessage() {      

    ScenarioDetailsFragment fragment = ScenarioDetailsFragment.newInstance(selectedMessage);
    getFragmentManager().beginTransaction()
        .replace(R.id.scenario_details_container, fragment)
        .disallowAddToBackStack() //Problem occurs with and without this line
        .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
    .commit();
    getFragmentManager().executePendingTransactions();
}

私はあまりにも長い間、この問題に頭を悩ませてきました。ここで何が起こっているかについて手がかりを持っている人はいますか?

4

1 に答える 1

0

私はかつて同様の例外を経験しましたが、何がどのように発生したか覚えていません。ただし、xml から OverviewListFragment を削除して、framelayout プレースホルダーに変更してみてください。そして、OverviewListFragment を動的に作成し、onCreate でフレームレイアウトに追加します。お役に立てれば。

于 2011-05-12T14:17:21.913 に答える