【问题标题】:IllegalStateException in Fragment Transition片段转换中的 IllegalStateException
【发布时间】:2011-05-06 17:13:22
【问题描述】:

我正在尝试使用 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();
}

我已经解决这个问题太久了。有没有人知道这里发生了什么?

【问题讨论】:

  • 我遇到了类似的问题。你想通了吗?任何帮助将不胜感激。

标签: android android-3.0-honeycomb android-fragments


【解决方案1】:

我曾经遇到过类似的异常,但我不记得它是什么以及如何引起的。但是,尝试从 xml 中删除 OverviewListFragment 并将其更改为 framelayout 占位符。然后动态创建OverviewListFragment并在onCreate中添加到framelayout中。 希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 2018-05-23
    相关资源
    最近更新 更多