我有一个带有两个布局的RecyclerView。在第一个RecyclerView项目中有一个EditText。但当我旋转设备时,EditText会丢失数据。(这就是我们使用ViewModel的原因。(我应该使用ViewModel作为适配器吗?(举个例子就好了:(
为了理解这种行为,您需要了解Activity Life Cycle
有深入的知识并努力记住它,让我简单解释一下。
原因
已经指出,**每当屏幕被旋转时,活动就会被Destroyed和Recreated,因此EditTexts丢失数据(丢失状态(
解决方案
有两种解决方案,
- 使用片段
-
或尝试
onSaveInstanceState
我将只关注第二种方法,它将告诉你如何解决这个问题
解决方案2
public class MainActivity extends AppCompatActivity {
EditText editTextTest;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editTextTest = findViewById(R.id.editTextTest);
if (savedInstanceState != null) {
testText = savedInstanceState.getString("editTextTest");
//Your State Restore Here
editTextTest.setText(testText);
}
}
@Override
protected void onSaveInstanceState(Bundle outState{
super.onSaveInstanceState(outState);
//Your State Sate here
outState.putString("editTextTest", text);
}
}
因此,当配置发生变化时(例如,当设备从横向旋转到纵向或反向时(,Android操作系统会破坏并重新创建"活动"。即onDestroy((>onCreate((,要处理此问题,可以有两个选项
- Activity的onSaveInstanceState方法,用于存储在配置更改时不希望丢失的属性,并在onRestoreInstanceState((或onCreate((中恢复属性
如何使用保存实例状态保存活动状态?
https://guides.codepath.com/android/Handling-Configuration-Changes#recyclerview
https://developer.android.com/guide/topics/resources/runtime-changes
-
您也可以在清单文件中指定,在配置更改的情况下,您不希望重新启动您的活动,您将通过android手动处理:configChanges
-
您可以使用ModelView来处理此类场景。https://guides.codepath.com/android/Handling-Configuration-Changes#leveraging-视图模型