在onCreateView方法和onActivityCreated方法中,Android片段状态始终为null

4

我曾在碎片类中使用过多个选项卡。但是保存碎片的状态时失败了。我使用了 onSaveInstanceState() 方法并将参数保存在其中。但是当我回到这个碎片时,保存的状态总是显示为“null”。我尝试了所有相关的问题和答案。但仍然面临着同样的问题。请问有谁能帮我解决这个问题呢?

我的代码:

 @Override
 public void onCreate(Bundle savedInstanceState) {
   // TODO Auto-generated method stub
   super.onCreate(savedInstanceState);
   setRetainInstance(true);
   super.onCreate(savedInstanceState);
   Log.d("savedInstanceStateInfo1", "" + savedInstanceState);
   if (null != savedInstanceState) {
    nAndroids = savedInstanceState.getInt("nAndroids");
    Log.d("NANDROIDS", "" + nAndroids);
   }
  }
  // Log.d("State in oncreate : ",""+savedInstanceState);

 @Override
 public void onActivityCreated(Bundle savedInstanceState) {
  super.onActivityCreated(savedInstanceState);
  setRetainInstance(true);
  Log.d("SavedinstanestateInfo", "" + savedInstanceState);
 }

 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container,
  Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  if (container == null) {
   return null;
  }
  // final ActionBar ab=getActivity().getSupportActionBar();

  View v = (LinearLayout) inflater.inflate(R.layout.infotab, container, false);
  Log.d("SavedinstanestateInfo", "" + savedInstanceState);
  return v;
 }
 @Override
 public void onSaveInstanceState(Bundle outState) {
  outState.putInt("nAndroids", nAndroids);

  super.onSaveInstanceState(outState);
 }

你有检查 onSaveInstanceState 是否被调用了吗? - Dalvinder Singh
是的,我已经检查过了。我已经在其中存储了一个整数值,但当返回到片段时,在onCreateView方法中显示为空值。 - poola naresh
1个回答

6

1) 使用setRetainInstance(true)时,onRestoreInstanceState的Bundle为null。

https://dev59.com/qGsz5IYBdhLWcg3wiISe#8488107

2)不是必须的,但更习惯于在对outState进行任何修改之前调用super.onSaveInstanceState(outState)。在onRestoreInstanceState(Bundle outState)中也是如此处理super.onRestoreInstanceState(outState)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接