📅  最后修改于: 2023-12-03 14:59:15.954000             🧑  作者: Mango
在 Android 应用开发中,通常使用数据绑定将数据和 UI 界面进行绑定。但是,当应用程序发生旋转、配置更改或者操作系统回收资源时,也需要保持数据的正确状态。为了解决这个问题,Google 推出了 ViewModel。
ViewModel 是设计用来以注重生命周期的方式管理 UI 相关数据的。它的作用类似于存储 UI 相关的数据并在恢复的过程中保证数据的完整性。ViewModel 不会受到旋转或者配置更改而销毁。当 Activity 或 Fragment 销毁时,ViewModel 也不会被销毁,因此其存储的数据保持不变,即使 Activity 或 Fragment 从后台恢复时也是如此。
使用 ViewModel 需要遵循以下步骤:
在 Gradle 中添加依赖项
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
创建 ViewModel 类
public class MyViewModel extends ViewModel {
private MutableLiveData<String> message = new MutableLiveData<>();
public void setMessage(String msg) {
message.setValue(msg);
}
public LiveData<String> getMessage() {
return message;
}
}
在 Activity 或 Fragment 中创建 ViewModel 并获取数据。
public class MainActivity extends AppCompatActivity {
private MyViewModel myViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myViewModel = new ViewModelProvider(this).get(MyViewModel.class);
myViewModel.setMessage("Hello World");
myViewModel.getMessage().observe(this, new Observer<String>() {
@Override
public void onChanged(String s) {
TextView textView = findViewById(R.id.textView);
textView.setText(s);
}
});
}
}
上述代码中,创建了一个名为 MyViewModel
的类,将要跟踪和管理的数据定义在内。在这个例子中,MyViewModel
中只有一个名为 message
的字符串类型的数据。
还需要注意的一点是,MyViewModel
中的数据必须使用 MutableLiveData
封装。这样,当数据发生变化时,可以通过 setValue(T)
方法更新它,也方便了其他类来观察这个数据。
最后,使用 ViewModelProvider
获取 MyViewModel
实例。在获取实例后,设置数据并观察 LiveData
对象的变化,当 LiveData
对象发生改变时,会自动更新 UI 界面。
通过使用 ViewModel 来管理 UI 相关的数据,可以保持一个 Activity 或 Fragment 被销毁的时候数据的完整性,而不必担心数据丢失或者数据不一致。在使用 ViewModel 的过程中,需要遵循上述步骤,即添加依赖项、创建 ViewModel,获取和设置数据并观察 LiveData 对象的变化。