旋转后片段的id 0x没有找到视图?

Gia*_*uca 2 android rotation fragment android-layout android-support-library

我正在一个容器中加载一些片段,它也容纳了一个导航抽屉.当旋转屏幕,然后将其旋转回来时,应用程序崩溃:

java.lang.RuntimeException:无法启动活动ComponentInfo {lu.gian.uniwhere.alfa/com.example.alfa.ActivityHome}:java.lang.IllegalArgumentException:找不到id 0x7f0b004e的视图(com.example.alfa:id/taxes_pager)片段FragmentTaxToBePaid {b5969898#2 id = 0x7f0b004e}

在转向风景后旋转回纵向模式时出现此错误.有趣的是我没有加载FragmentTaxes(即NB.,a ViewPager),但完全是另一个片段(FragmentOverwiew - 没什么特别需要注意的)!

从FragmentSession旋转回来时它会抛出完全相同的错误,FragmentSession也是一个ViewPager持有者:

java.lang.RuntimeException:无法启动活动ComponentInfo {lu.gian.uniwhere.alfa/com.example.alfa.ActivityHome}:java.lang.IllegalArgumentException:找不到id 0x7f0b000f的视图(com.example.alfa:id/session_pager)片段FragmentSessionApplied {b5afa300#1 id = 0x7f0b000f}

我已经尝试了所有的东西(没有保留片段的实例,将它们放在后面的堆栈中,替换Framexml标签FrameLayout,为景观模式创建特定的布局等等),但几乎没有任何排序效果.我认为这是由于片段生命周期,因为崩溃是不稳定的,难以调试,但很难理解如何解决这类问题.

ActivityHome

public void selectItem(int position) {
        // ...
    FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.beginTransaction()
                    .addToBackStack(null)
                    .replace(R.id.content_frame, fragment)
                    .commit();
    mDrawerList.setItemChecked(position, true);
    setTitle(mDrawerTitles[position]);
    mDrawerLayout.closeDrawer(mDrawerList);
}
Run Code Online (Sandbox Code Playgroud)

activity_home

<android.support.v4.widget.DrawerLayout
    ... >

    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />


    <!-- The navigation drawer  .... -->

</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)

FragmentTaxes

    View rootView = inflater.inflate(R.layout.fragment_taxes, container, false);
Run Code Online (Sandbox Code Playgroud)

fragment_taxes

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    ... >

    <!-- Loader -->
    <include
        android:id="@+id/taxes_main_progress"
        layout="@layout/indeterminate_activity_bar" />

    <android.support.v4.view.ViewPager
        android:visibility="gone"
        android:id="@+id/taxes_pager"
        ... >

        <android.support.v4.view.PagerTabStrip
            android:id="@+id/taxes_pager_tab_strip"
            ... />
    </android.support.v4.view.ViewPager>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

如果需要,我会发布更多代码片段.现在我没有,我认为它会导致阅读混乱.

Gia*_*uca 8

这完全归功于setRetainInstance(true).我认为在两个ViewPagers中将它设置为false就足够了.实际上并非如此.我从单个(嵌套)片段中删除它,一切顺利.

它看起来像嵌套的片​​段无法处理setRetainInstance.从这里得到它:ViewPager有一个包含多个片段的页面"java.lang.IllegalArgumentException:找不到id的视图"