当前位置:   article > 正文

Android架构组件:MVVM模式的实战应用

Android架构组件:MVVM模式的实战应用

        在 Android 开发中,MVVM(Model-View-ViewModel)模式是一种非常流行的架构模式,它可以帮助开发者更好地组织代码,使得应用程序更加模块化、易于维护。

1. MVVM 概念回顾

1.1 Model
        职责:处理数据和业务逻辑。
        实例:数据访问对象(DAO)、网络请求、数据库操作等。

1.2 View
        职责:展示数据和与用户交互。
        实例:Activity、Fragment、View 等。

1.3 ViewModel
        职责:作为 Model 和 View 之间的桥梁,处理 UI 相关的逻辑。
        实例:持有数据和 UI 相关的状态,处理用户输入,更新 UI 等。

2. Android 架构组件支持

2.1 LiveData
        用途:在 ViewModel 中使用,当数据发生变化时通知 View 更新。
        特点:生命周期感知,只在 Activity 或 Fragment 的生命周期内有效。

2.2 ViewModel
        用途:保存与 UI 相关的数据状态。
        特点:生命周期感知,不会因为配置变化而被销毁。

2.3 Data Binding
        用途:实现 View 和 ViewModel 之间的双向绑定。
        特点:简化 UI 更新逻辑,减少手动更新 UI 的代码。

3. 实战应用示例

3.1 创建 ViewModel

  1. public class MainViewModel extends ViewModel {
  2. private MutableLiveData<String> text;
  3. public MainViewModel() {
  4. text = new MutableLiveData<>();
  5. text.setValue("Hello World!");
  6. }
  7. public LiveData<String> getText() {
  8. return text;
  9. }
  10. }

3.2 创建 Repository

  1. public class MainRepository {
  2. private final DataSource dataSource;
  3. public MainRepository(DataSource dataSource) {
  4. this.dataSource = dataSource;
  5. }
  6. public LiveData<String> fetchTextFromNetwork() {
  7. // Simulate network request
  8. return dataSource.fetchData();
  9. }
  10. }

3.3 创建 DataSource

  1. public class NetworkDataSource implements DataSource {
  2. @Override
  3. public LiveData<String> fetchData() {
  4. MutableLiveData<String> data = new MutableLiveData<>();
  5. // Simulate a network call
  6. new Thread(() -> {
  7. try {
  8. Thread.sleep(2000); // Simulate delay
  9. data.postValue("Data from the network");
  10. } catch (InterruptedException e) {
  11. e.printStackTrace();
  12. }
  13. }).start();
  14. return data;
  15. }
  16. }

3.4 在 Activity 中使用 ViewModel

  1. public class MainActivity extends AppCompatActivity {
  2. private MainViewModel viewModel;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. viewModel = new ViewModelProvider(this).get(MainViewModel.class);
  8. // Observe LiveData and update UI
  9. viewModel.getText().observe(this, text -> {
  10. TextView textView = findViewById(R.id.text_view);
  11. textView.setText(text);
  12. });
  13. // Fetch data from repository
  14. MainRepository repository = new MainRepository(new NetworkDataSource());
  15. viewModel.setText(repository.fetchTextFromNetwork());
  16. }
  17. }

3.5 使用 Data Binding

  1. <!-- activity_main.xml -->
  2. <layout xmlns:android="http://schemas.android.com/apk/res/android">
  3. <data>
  4. <variable
  5. name="viewModel"
  6. type="com.example.MainViewModel" />
  7. </data>
  8. <LinearLayout
  9. android:layout_width="match_parent"
  10. android:layout_height="match_parent"
  11. android:orientation="vertical">
  12. <TextView
  13. android:id="@+id/text_view"
  14. android:layout_width="wrap_content"
  15. android:layout_height="wrap_content"
  16. android:text="@{viewModel.text}" />
  17. </LinearLayout>
  18. </layout>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/1021019
推荐阅读
相关标签
  

闽ICP备14008679号