旋转期间无法保存片段状态

时间:2017-08-08 11:08:05

标签: java android android-fragments

我在活动中有几个片段,由底栏更改。我尝试使用Once for all, how to correctly save instance state of Fragments in back stack?实现片段状态处理 问题是

    mContent = getSupportFragmentManager().getFragment(savedInstanceState, TAG);

返回下一个错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference

调试时我有下一个savedInstanceSet:

ArrayMap@5665, size = 4
 value[0]=Bundle
 value[1]="FragmentName"
 value[2]=FragmentManagerState
 value[3]={Integer}"0"

请不要粘贴

等解决方案
 setRetainInstance(true),
 android:configChanges="orientation|screenSize"

等等,因为我需要重新创建片段(陆地和肖像的不同xml文件)。

2 个答案:

答案 0 :(得分:1)

使用以下代码;

将此行添加到menifest

 @Override
   protected void onRestoreInstanceState(Bundle savedInstanceState) {
   super.onRestoreInstanceState(savedInstanceState);
          onCreate(savedInstanceState);
       }

并将此功能添加到您的活动文件

int n = 0;
while (n < number)
{
    btnArray[n].Name = "" + (n + 1);
    tablePanel.Controls.Remove(btnArray[n]);
    n++;
}

答案 1 :(得分:0)

  

如果您不想覆盖配置更改

,请将其包含在清单中
<activity android:name=".MainActivity" android:configChanges="orientation|screenSize|screenLayout" >
  

如果您不想覆盖onConfigChange,这基本上允许操作系统为您处理方向更改此代码应该可以正常工作