Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android应用程序释放其碎片状态_Android_Overlay_Fragment_Tabbar - Fatal编程技术网

Android应用程序释放其碎片状态

Android应用程序释放其碎片状态,android,overlay,fragment,tabbar,Android,Overlay,Fragment,Tabbar,我有一个标签栏在我的应用程序与几个按钮,这些按钮有一个片段。在单击按钮时,我隐藏当前显示的一个,然后显示与单击的按钮对应的片段。一切都很好,但有时当我从另一个活动中返回或将应用程序放在后台较长时间后,我会看到所有这些碎片堆积在它们自己身上 这种行为的原因是什么?我应该如何纠正它 更新1: 这就是恢复实例状态的方法 @Override public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInsta

我有一个标签栏在我的应用程序与几个按钮,这些按钮有一个片段。在单击按钮时,我隐藏当前显示的一个,然后显示与单击的按钮对应的片段。一切都很好,但有时当我从另一个活动中返回或将应用程序放在后台较长时间后,我会看到所有这些碎片堆积在它们自己身上

这种行为的原因是什么?我应该如何纠正它

更新1:

这就是恢复实例状态的方法

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

    mCurrentTab = 0;

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

    if (fragment1 != null)
        ft.show(fragment1);
    if (fragment2 != null)
        ft.hide(fragment2);
    if (fragment3 != null)
        ft.hide(fragment3);
    if (fragment4 != null)
        ft.hide(fragment4);
    if (fragment5 != null)
        ft.hide(fragment5);

    ft.commit();
}
这里是在onTabbarButtonClick中切换片段(所有按钮都有相同的侦听器)


我不是100%确定,但这些问题通常是由活动中传递的savedInstanceState引起的:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
当您这样做的时候,您也会传递一些片段,这些片段可能与您实现片段的方式不太匹配(您还没有显示任何代码,所以真的不知道)。您可以尝试简单地使用
super.onCreate(null)但每次都是从头开始创建


或者,您应该正确地进行设置,记住片段的状态,并在初始化片段时进行设置。

您确定总是要调用onRestoreInstanceState吗?我不确定情况是否如此,例如:

我使用的方法如下所述(请参阅添加导航选项卡一节):

您好,谢谢您的回复:)我用我的应用程序中的一些代码示例编辑了我的答案。我这样做对吗?
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);