📜  Android 中使用 ViewModel 进行数据绑定(1)

📅  最后修改于: 2023-12-03 14:59:15.954000             🧑  作者: Mango

Android 中使用 ViewModel 进行数据绑定

在 Android 应用开发中,通常使用数据绑定将数据和 UI 界面进行绑定。但是,当应用程序发生旋转、配置更改或者操作系统回收资源时,也需要保持数据的正确状态。为了解决这个问题,Google 推出了 ViewModel。

什么是 ViewModel?

ViewModel 是设计用来以注重生命周期的方式管理 UI 相关数据的。它的作用类似于存储 UI 相关的数据并在恢复的过程中保证数据的完整性。ViewModel 不会受到旋转或者配置更改而销毁。当 Activity 或 Fragment 销毁时,ViewModel 也不会被销毁,因此其存储的数据保持不变,即使 Activity 或 Fragment 从后台恢复时也是如此。

如何使用 ViewModel

使用 ViewModel 需要遵循以下步骤:

  1. 在 Gradle 中添加依赖项

    implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
    
  2. 创建 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;
        }
    }
    
  3. 在 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 对象的变化。