如何在Android Activity中存储已更改的视图可见性

时间:2014-08-20 19:42:37

标签: android

我有一个活动,其中有一个按钮(可见)和一个EditText(不可见)。

当我点击按钮时,编辑文字变得可见。现在,如果我关闭我的应用程序,我希望保存此状态。我想保存编辑文本的可见状态。

我查看了网页,它说明如果我在活动中覆盖了onSaveInstanceState,那么它应该没问题。

在onSaveInstanceState中,我只是调用super函数。

在我的onCreate方法中,我有super.onCreate。

还有什么需要做的吗?

由于

3 个答案:

答案 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