我的应用程序有两个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");
}
}
答案 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);