您的位置:首页 > 汽车 > 时评 > Android架构组件:MVVM模式的实战应用

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

2025/1/15 12:24:11 来源:https://blog.csdn.net/m0_66995023/article/details/141420645  浏览:    关键词: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

public class MainViewModel extends ViewModel {private MutableLiveData<String> text;public MainViewModel() {text = new MutableLiveData<>();text.setValue("Hello World!");}public LiveData<String> getText() {return text;}
}

3.2 创建 Repository

public class MainRepository {private final DataSource dataSource;public MainRepository(DataSource dataSource) {this.dataSource = dataSource;}public LiveData<String> fetchTextFromNetwork() {// Simulate network requestreturn dataSource.fetchData();}
}

3.3 创建 DataSource

public class NetworkDataSource implements DataSource {@Overridepublic LiveData<String> fetchData() {MutableLiveData<String> data = new MutableLiveData<>();// Simulate a network callnew Thread(() -> {try {Thread.sleep(2000); // Simulate delaydata.postValue("Data from the network");} catch (InterruptedException e) {e.printStackTrace();}}).start();return data;}
}

3.4 在 Activity 中使用 ViewModel

public class MainActivity extends AppCompatActivity {private MainViewModel viewModel;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);viewModel = new ViewModelProvider(this).get(MainViewModel.class);// Observe LiveData and update UIviewModel.getText().observe(this, text -> {TextView textView = findViewById(R.id.text_view);textView.setText(text);});// Fetch data from repositoryMainRepository repository = new MainRepository(new NetworkDataSource());viewModel.setText(repository.fetchTextFromNetwork());}
}

3.5 使用 Data Binding

<!-- activity_main.xml -->
<layout xmlns:android="http://schemas.android.com/apk/res/android"><data><variablename="viewModel"type="com.example.MainViewModel" /></data><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/text_view"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{viewModel.text}" /></LinearLayout>
</layout>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com