嵌套片段。如何知道所有这些都附加到活动?

时间:2013-10-18 13:13:21

标签: android android-fragments android-support-library

我的应用程序使用多个嵌套片段。其中一些片段是占位符。当我尝试用初始的片段替换占位符时,我得到了

java.lang.IllegalStateException: Activity has been destroyed

我确信活动很好,问题是由未附加到活动的碎片引起的。那么如何知道所有嵌套片段何时附加到活动?

有关我的设置的其他信息:

我有一个Activity在其布局文件中有片段声明:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainLayout"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment
        android:id="@+id/rightPane"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.company.PagerFragment"/>
</LinearLayout>

PagerFragment是视图寻呼机的主机。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="wrap_content"
              android:layout_height="match_parent"
              android:orientation="horizontal">

    <ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

我将两个Fragment放入寻呼机。它们作为占位符。

我想用初始片段替换占位符但是当我在activity onCreate方法中启动替换时,我得到了上述异常。

如果我在活动的new Handler().postDelayed(..)方法中使用onCreate,那么一切正常。我宁愿不使用延迟方法,原因很明显。

我尝试用其他活动的方法替换占位符,例如onStart()onResume()onResumeFragments()onPostResume(),但这没有帮助。

编辑:

public class PagerFragment extends Fragment
{
    ..
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        return inflater.inflate(R.layout.fragment_right_pane, container, false);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState)
    {
        super.onViewCreated(view, savedInstanceState);

        if (savedInstanceState == null)
        {
            m_primary = new PlaceholderFragment();
            m_secondary = new PlaceholderFragment();
        }
        else
        {
            FragmentManager fm = getChildFragmentManager();
            m_primary = (PlaceholderFragment)fm.getFragment(savedInstanceState, FRAGMENT_TAG_PRIMARY);
            m_secondary = (PlaceholderFragment)fm.getFragment(savedInstanceState, FRAGMENT_TAG_SECONDARY);
        }

        Fragment[] fragments = new Fragment[] { m_primary, m_secondary };
        PagerAdapter pagerAdapter = new FragmentPagerAdapter(getChildFragmentManager(), fragments);
        m_viewPager = (ViewPager)view.findViewById(R.id.pager);
        m_viewPager.setAdapter(pagerAdapter);
        m_viewPager.setOnPageChangeListener(this);
        m_viewPager.setCurrentItem(0, true);
    }
..
}

0 个答案:

没有答案