onSaveInstanceState不写数据

时间:2017-09-11 11:45:10

标签: android

我的应用程序有两个Activity。 我需要一个Activity来保存一个String,所以为此我使用了下面的方法。

@Override
protected void onSaveInstanceState(Bundle bundle) {
  bundle.putString("ACTIVITY", "Dados que precisando ser salvos!");
  super.onSaveInstanceState(bundle);
}

当我转到第二个活动时,调用上面的方法,它在应用程序中是正确的行为。 但是在回到我的第一个活动时,捆绑包是空的,我不明白为什么,有人可以帮助我吗?

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   if (savedInstanceState != null){
   String teste = savedInstanceState.getString("ACTIVITY");
   }
}

2 个答案:

答案 0 :(得分:1)

覆盖

onRestoreInstanceState(),您希望在其中提取值:

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
  // Restore UI state from the savedInstanceState. 
  // This bundle has also been passed to onCreate. 
  String myString = savedInstanceState.getString("ACTIVITY");
}

最佳做法是在同一活动中使用这两种方法来恢复,然后将该数据用于其他一些活动,因为您可以使用共享首选项或传递意图。

答案 1 :(得分:0)

只有在销毁并重新创建活动时,才能使用onSaveInstanceState()onRestoreInstanceState()

当从活动A调用到活动B的意图时,活动A被移动到后栈并且不被销毁。活动A onStop()被调用而不是onDestory(),所以当你回来时onRestart()被调用,而且捆绑包也没有被保存。

相反,您可以在此类活动中使用sharedPreferences

1.点击按钮

时保存值
SharedPreferences sharedPref = getSharedPreferences("YOUR PREF NAME", Context.MODE_PRIVATE);
sharedPref.edit().putString("ACTIVITY", "Dados que precisando ser salvos!").apply();

2.从restring app的首选项中恢复值

sharedPref.putString("ACTIVITY", null);

编辑:如果您没有使用活动,请使用上下文来使用首选项

SharedPreferences sharedPref = context.getSharedPreferences("YOUR PREF NAME", Context.MODE_PRIVATE);