【问题标题】:Bundle savedInstanceState is always null捆绑包 savedInstanceState 始终为空
【发布时间】:2014-02-05 16:49:49
【问题描述】:

我有两个不同的活动,在第一个活动中,我在一些 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);
}

在做debug的时候,可以看到savedInstanceState Bundle确实已经在onSaveInstanceState方法中填写了,但是在OnCreate中却显示为null。

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

【问题讨论】:

  • 如果在onSavedInstanceState 方法的第一行调用super.onSaveInstanceState(savedInstanceState) 会发生什么?
  • "第一个活动中 EditTexts 上的文本消失了" - 唯一会发生的方法是清除它们,用新实例替换它们,或者如果第一个活动由于某种原因被摧毁。您可以通过查看是否调用了 onDestroy() 来确定后一种情况。
  • @CommonsWare..如何检测是否调用了 onDestroy() .?

标签: android


【解决方案1】:

你需要调用super.onSaveInstanceState(savedInstanceState);作为onSaveInstanceState方法的第一行。

接下来你需要放

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

             txtClient.setText(client);
  }

进入onRestoreInstanceState 方法。 onCreate 仅在重新绘制应用时调用。

【讨论】:

  • 已经添加了onRestoreInstanceState方法,没用,但是在调试之后,程序好像从来没有使用过该方法(即使使用@Override)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      我猜想 onCreate 是在 aactivity 将要加载到内存中时调用的,而那时 activity 不包含任何东西。这就是为什么它总是返回 null。

      保存数据你有onsaveinstance方法,恢​​复你有onrestoreinstance方法。

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

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

      【讨论】:

      • 那么有没有办法保存该信息以便以后再次加载活动时使用它?
      猜你喜欢
      • 2012-08-10
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 2013-12-31
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      相关资源
      最近更新 更多