繁体   English   中英

如何保存视图的 state 并在用户返回时恢复它?

[英]how to save state of a View and restore it when the user comes back in?

我正在创建一个 Android 应用程序,我在其中与两个不同的视图进行交互,因此用户可以通过单击按钮在它们之间切换。 请注意,我使用的是 setContentView 方法。 那么如何保存每个视图的 state(包含 EditText、可以启用/禁用的按钮)并在用户离开视图并返回时恢复它?

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_layout1);
}


@Override
protected void onSaveInstanceState(Bundle State) {
    super.onSaveInstanceState(State);
    State.putCharSequence("key" , txt.getText());
}

(txt) 是一个编辑文本。

@Override
protected void onRestoreInstanceState(Bundle State) {
    super.onRestoreInstanceState(State);
    txt.setText(State.getCharSequence("key"));
}

public void method1(View view) {
    setContentView(R.layout.id1);
}

public void method2 (View v){
   setContentView(R.layout.id2); 
}

当用户返回它时,我想恢复 layout1 的 state。

我推荐阅读 Activity 生命周期,特别是关于保存和恢复 UI state 的部分,可以在这里找到。 基本上,您需要将 UI state 保存在onSaveInstanceState()中。

编辑:现在发生的是EditText值没有保存,因为您首先调用super.onSaveInstanceState(state) 首先将EditText值保存到Bundle ,然后调用super.onSaveInstanceState(state)

@Override
protected void onSaveInstanceState(Bundle State) {
    State.putCharSequence("key" , txt.getText());
    super.onSaveInstanceState(State);
}

然后在您的onRestoreINstanceState上,您不必调用super ,您只需获取保存的值并立即将其设置为您的EditText

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM