浅谈Android开发中的MVVM模式
Posted 冬天的毛毛雨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈Android开发中的MVVM模式相关的知识,希望对你有一定的参考价值。
作者:miaowmiaow
前言
看到有人说 MVVM 核心是 双向绑定,没有使用 Databinding 的项目都是假 MVVM 。
即:MVVM == 双向绑定,双向绑定 == Databinding,MVVM == Databinding。
今天我们便来聊一聊 android 中的 MVVM。
MVVM
MVVM(Model-View-ViewModel)最早由微软提出。ViewModel指 “Model of View”——视图的模型。
- Model:它仅仅关注数据本身,不关心任何行为。
- View:负责接收用户输入、发起数据请求及展示结果页面。
- ViewModel:负责业务逻辑,实现 View 与 Model 的双向绑定。
双向绑定
简而言之,视图随数据改变,数据随视图改变。
Android 中的 MVVM
在 Android 中我们通过 Jetpack 提供的多个组件来实现 MVVM 。
- Model:对应图中的
Repository
(网络请求数据、本地数据库数据等)。 - View:对应图中的
Activity/Fragment
。 - ViewModel:对应图中的
ViewModel
和LiveData
。
ViewModel + LiveData 实现双向绑定
Activity/Fragment
通过观察 ViewModel
中的 LiveData
来更新界面。
Repository
通过更新 ViewModel
中的 LiveData
来更新界面。
单纯的文字可能比较晦涩难懂,我们结合代码来看会更加清晰。
TestActivity
import android.os.Bundle
import android.view.LayoutInflater
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import com.example.fragment.project.databinding.ActivityTestBinding
import com.example.fragment.project.model.TestViewModel
class TestActivity : AppCompatActivity()
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
val bind = ActivityTestBinding.inflate(LayoutInflater.from(this))
setContentView(bind.root)
// 使用“by viewModels()”Kotlin属性委托获取ViewModel
val viewModel: TestViewModel by viewModels()
bind.btn.setOnClickListener
//通过LiveData更新天气信息
viewModel.updateWeather("阴天")
//通过观察LiveData来更新界面
viewModel.weatherResult.observe(this)
bind.weather.text = it
//通过ViewModel获取天气信息
viewModel.getWeather()
activity_test.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white">
<TextView
android:id="@+id/weather"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="雨天" />
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/weather"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:text="纠正天气:阴天" />
</RelativeLayout>
TestViewModel
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
class TestViewModel : ViewModel()
// 这边就不写Model直接更新数据
val weatherResult = MutableLiveData<String>()
fun getWeather()
// 获取网络数据或本地数据库数据等
weatherResult.postValue("晴天")
fun updateWeather(str: String)
// 更新网络数据或本地数据库数据等
weatherResult.postValue(str)
至此 Android 开发中的 MVVM 算是全部讲完。
MVVM 与 DataBinding 的关系
原本计最后详细讲下 Databinding | 数据绑定库 ,写到这里又觉得没必要。
怎么说呢,MVVM 是一种架构模式,而 DataBinding 是谷歌推出的方便实现 MVVM 的工具。
对此感兴趣的童鞋可以自行去官网查看。
Thanks
以上就是本篇文章的全部内容,如有问题欢迎指出,我们一起进步。
如果喜欢的话希望点个赞吧,您的鼓励是我前进的动力。
谢谢~~
最后推荐一个入门级的项目 fragmject ,通过对Kotlin和Jetpack全家桶的系统运用,实现的一个功能完备符合主流市场标准App。 代码简单,内容全面,知识详细,快速上手,对理解其他项目设计思想和封装技巧也很有帮助。
以上是关于浅谈Android开发中的MVVM模式的主要内容,如果未能解决你的问题,请参考以下文章