Bundle savedInstanceState始终为null

时间:2014-02-05 16:49:49

标签: android

我有两个不同的活动,第一个我在一些EditTexts中输入一些信息,然后我转到第二个活动,但是当我返回时,第一个活动中EditTexts上的文本消失了。

这是第一个活动的OnCreate():

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.act_frm_recetas);

    txtClient = (EditText) findViewById(R.id.txtNombreCliente);

           if(savedInstanceState != null){
                 String client = savedInstanceState.getString("Client");

                 txtClient.setText(client);
            }
}

我正在使用onSaveInstanceState方法来保存信息

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {

    String x = txtClient.getText().toString();
    savedInstanceState.putString("Client", x);

    super.onSaveInstanceState(savedInstanceState);
}

在进行调试时,我可以看到savedInstanceState Bundle确实已在onSaveInstanceState方法中填充,但在OnCreate中显示为null。

也许我必须在第二项活动中添加一些内容?除了一个让我回到第一个活动的按钮之外,我目前没有任何东西。

4 个答案:

答案 0 :(得分:0)

您需要将super.onSaveInstanceState(savedInstanceState);作为onSaveInstanceState方法的第一行。

接下来你需要把

if(savedInstanceState != null) {
             String client = savedInstanceState.getString("Client");

             txtClient.setText(client);
  }

进入onRestoreInstanceState方法。只有在重新绘制应用时才会调用onCreate

答案 1 :(得分:0)

它显示为null,因为仅在首次创建该活动时调用onCreate,当您从第二个活动返回时,它会恢复您的第一个活动..在onResume()方法上显示它

答案 2 :(得分:0)

我的猜测是第一个活动尚未被销毁,因此当您导航回第一个活动时,永远不会调用onCreate

答案 3 :(得分:-1)

我想当onactivity要加载到内存中时调用onCreate,那时活动不包含任何内容。这就是为什么它总是返回null。

保存您拥有onsaveinstance方法的数据并恢复您的onrestoreinstance方法。

onSaveInstanceState()是一种用于在暂停活动之前存储数据的方法。

onRestoreInstanceState()是用于检索该数据的方法。