我正在一个容器中加载一些片段,它也容纳了一个导航抽屉。 当旋转屏幕然后再将其旋转时,应用程序崩溃了:
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 。,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}
我已经尝试了一切(不保留片段的实例,将它们放在后面的堆栈中,用Frame
替换FrameLayout
xml标记,创建一个特定的然后横向模式等等的布局,但几乎没有任何排序效果。
我认为这是由于片段生命周期,因为崩溃是不稳定的,难以调试,但很难理解如何解决这类问题。
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);
}
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>
FragmentTaxes
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>
如果需要,我会发布更多代码片段。现在我没有,我认为这会导致阅读混乱。
答案 0 :(得分:8)
这完全归功于setRetainInstance(true)
。我认为在两个ViewPagers中将它设置为false就足够了。实际上并非如此。
我从单个(嵌套)片段中删除它,一切顺利。
看起来嵌套片段无法处理setRetainInstance
。从这里得到它:ViewPager with one page containing multiple Fragments "java.lang.IllegalArgumentException: No view found for id"