mvandroidapk攻略 mvandroidapk无冬镇后山怎么过
2023-06-01 17:04:28 小编: 我要评论
最近听到很多人在谈论Android开发中的MVVM模式,相信大家都对MVVM模型也有自己的看法,所以今天我们就深入了解一下
MVVM是Model-View-ViewModel缩写基本上是以MVC为根据的改进版本,MVVM本质上就是把它放在哪里View抽象处理状态和行为
MVVM框架是根据MVP模式与WPF一种由应用模式演变而来的新型框架,现在不仅有了原来的框架MVP同时框架WPF为了应对未来越来越复杂的项目需求,结合了新的特点,它是最重要和最关键的一点 就是能实现双向数据绑定
为何要做 MVVM ?我们将MVVM分为三部分:
● M(Model,模型层 )
● V(View,视图层)
● VM(ViewModel,V与M连接的桥梁也可视为控制器)
优势● 低耦合:View可以独立于Model同样的变化和修改ViewModel可以被多个View并且可以做到View和Model变化不相互影响
● 可重用性:可以把一些视图的逻辑放在ViewModel,让多个View复用
● 独立开发:开发人员可以专注于业务逻辑和数据的开发
● 可测性:清晰View分层使绩效层业务逻辑的测试更容易、更简单
难点● 数据绑定 Bug 很难调试,你看到界面异常,可能是你 View 的代码有 Bug,也可能是 Model 的代码有问题,数据绑定一个位置的 Bug 被快速传递到其他位置,定位原有问题的地方就不那么容易了。
● 在大模块中,model它也会很大。虽然使用方便,但很容易保证数据的一致性。当时,长期持有和不释放内存会导致更多的内存
● 数据双向绑定不利于代码重用,客户开发最常用的重用是View,但是数据双向绑定技术让你在一起View都绑定了一个model,不同模块的model都不一样,不能简单的重用。View了
双向绑定我们通常使用它ViewModel LiveData 双向绑定功能
首先,我们通过 Activity/Fragment 进行观察 ViewModel 中的 LiveData 更新界面
Repository 通过更新 ViewModel 中的 LiveData 来更新界面
接下来,我们将实现代码实现
TestActivityimport android.os.Bundleimport android.view.LayoutInflaterimport androidx.activity.viewModelsimport androidx.appcompat.app.AppCompatActivityimport com.example.fragment.project.databinding.ActivityTestBindingimport com.example.fragment.project.model.TestViewModelclass 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.MutableLiveDataimport androidx.lifecycle.ViewModelclass TestViewModel : ViewModel() { // 这边就不写Model直接更新数据 val weatherResult = MutableLiveData<String>() fun getWeather() { // 等等 weatherResult.postValue("晴天") } fun updateWeather(str: String) { // 更新网络数据或本地数据库数据等 weatherResult.postValue(str) }}
通过这些代码可以看到MVVM模式的功能
结语以上是本文的全部内容
如果你喜欢文章中的内容,欢迎你表扬和评论。你的鼓励将是我前进的动力
需要文章中的源代码,或者想了解更多Android开发相关高级数据
欢迎在评论区留言或私信