2

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

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在寻呼机中放了两个 s。它们用作占位符。

我想用初始片段替换占位符,但是当我在活动的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);
    }
..
}
4

0 回答 0