【问题标题】:No view found for id 0x for fragment after rotation?旋转后没有为片段找到 id 0x 的视图?
【发布时间】:2013-08-14 11:40:51
【问题描述】:

我正在一个容器中加载一些片段,该容器也包含一个导航抽屉。 旋转屏幕,然后再旋转回来时,应用程序崩溃:

java.lang.RuntimeException:无法启动活动 组件信息{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.,ViewPager),而是完全另一个片段(FragmentOverwiew - 没有什么特别需要注意的关于它)!

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

java.lang.RuntimeException:无法启动活动 组件信息{lu.gian.uniwhere.alfa/com.example.alfa.ActivityHome}: java.lang.IllegalArgumentException:没有为 id 0x7f0b000f 找到视图 (com.example.alfa:id/session_pager) 用于片段 FragmentSessionApplied{b5afa300 #1 id=0x7f0b000f}

我已经尝试了一切(不保留片段的实例,将它们放在后堆栈中,将Frame xml 标记替换为FrameLayout,然后为横向创建特定布局模式等),但几乎没有任何效果。 我认为这是由于片段生命周期造成的,因为崩溃是不稳定的且难以调试,但很难理解如何解决此类问题。

活动主页

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);
}

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>

碎片税

    View rootView = inflater.inflate(R.layout.fragment_taxes, container, false);

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>

如果需要,我会发布更多的 sn-ps 代码。现在我没有,我认为这可能会导致阅读混乱。

【问题讨论】:

    标签: android android-layout rotation fragment android-support-library


    【解决方案1】:

    这一切都归功于setRetainInstance(true)。我认为在两个 ViewPager 中将其设置为 false 就足够了。实际上不是。 我将它从单个(嵌套)片段中删除,一切顺利。

    看起来嵌套片段无法处理setRetainInstance。从这里得到它:ViewPager with one page containing multiple Fragments "java.lang.IllegalArgumentException: No view found for id"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-02
      相关资源
      最近更新 更多