0

有没有简单的方法来保存整个活动实例并恢复它?
在花了 1 小时搜索互联网的各个角落后,我最终来到了这里。我还是不知道怎么做这个。

是的,我知道如何使用保存当前实例onSaveInstanceStateonRestoreInstanceState 但互联网上没有人用大型复杂编码(如动态创建的视图、许多文本视图和计算等)解释它。

每个人都只用一两个 textView 来解释这一点,我就像“有人怎么能用很少的 TextView 创建一个应用程序!?!” 如下所示:

onSaveInstanceState()

protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    Log.i(TAG, "onSaveInstanceState");
    
    final EditText textBox = 
            (EditText) findViewById(R.id.editText);
    CharSequence userText = textBox.getText();
    outState.putCharSequence("savedText", userText);

}

onRestoreInstanceState()

    @Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
   super.onRestoreInstanceState(savedInstanceState);
   Log.i(TAG, "onRestoreInstanceState");

   final EditText textBox =
        (EditText) findViewById(R.id.editText);

   CharSequence userText =
                savedInstanceState.getCharSequence("savedText");

   textBox.setText(userText);
}

我完全可以理解上述方法。但是,如果我们完成了一个相当复杂的编码并想要保存和恢复状态我已经完成了所有复杂的编码工作并遇到了这个问题,该怎么办。
我相信会有一个简单的方法来实现这一点。请理解我的问题。帮我。
4

1 回答 1

0

如果我理解正确,即使页面发生变化,您也想保存页面的当前状态,如果是这种情况,可以通过数据绑定解决如下:
1.在 Gradle 中启用数据绑定
2.在 XML 文件中放入您的布局到布局标签

<layout>
 ...// your activity view layout
</layout>
  1. 然后在您的活动中定义它:

    私有lateinit var绑定:FragmentNameBinding

4.在onCreate或onCreateView中添加这个表达式(用于片段)

if (!(::binding.isInitialized)) {
  //initialize you layout file and what ever you want 
   }
  //then initialize what you want to not change  after the layout 
  changed and back to it
  
于 2020-12-18T16:45:08.043 回答