我有一个活动,其中有一个按钮(可见)和一个EditText(不可见)。
当我点击按钮时,编辑文字变得可见。现在,如果我关闭我的应用程序,我希望保存此状态。我想保存编辑文本的可见状态。
我查看了网页,它说明如果我在活动中覆盖了onSaveInstanceState,那么它应该没问题。
在onSaveInstanceState中,我只是调用super函数。
在我的onCreate方法中,我有super.onCreate。
还有什么需要做的吗?
由于
答案 0 :(得分:3)
编辑:仅供参考,这个答案假设这是为了在配置更改中保存状态 - 而不是持久状态保存。
在某处保留一个布尔值,并在必要时保存/恢复。例如:
private static final String EDIT_TEXT_VISIBLE = "edit_text_visible";
private boolean mEditTextVisible;
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(EDIT_TEXT_VISIBLE, mEditTextVisible);
}
public void onCreate(Bundle savedState) {
super.onCreate(savedState);
// Do your view initialization...
// If there's saved state, restore the state that you saved,
// and apply it to the EditText.
if (savedState != null) {
mEditTextVisible = savedState.getBoolean(EDIT_TEXT_VISIBLE);
mEditText.setVisibility(mEditTextVisible ? View.VISIBLE : View.INVISIBLE);
}
}
答案 1 :(得分:3)
您可以在配置更改(例如轮换)时从onSaveInstanceState检索值,但是当您关闭应用程序时(例如后退按钮),则需要从持久性存储中检索状态,如共享首选项。
// obtain shared preferences
SharedPreferences preferences = getSharedPreferences("prefs_file_name", MODE_PRIVATE);
// Update shared preferences file
@Override
public void onPause() {
sharedPreferences.Editor prefsEditor = mSharedPreferences.edit();
prefsEditor.putInt("visibility", mEditText.getVisibility());
super.onPause();
}
然后在onResume()
上阅读 int visibility = preferences.getInt("visibility", 0);
mEditText.setVisibility(visibility);
答案 2 :(得分:1)
为什么忘记将数据放在onSaveInstanceState的Bundle中并在onCreate中检索它的部分?
你不只是在onSaveInstance状态中调用super方法,你也将数据放在Bundle中。
另一个快速选项是将这些值存储在SharedPreference
中