深入浅出:MVVM+ViewBinding+Kotlin的入门学习方法(1)

本文讨论了在移动应用开发中,从MVP模式转变为MVVM模式的优势,尤其是ViewModel和ViewBinding的使用,强调了持续学习新技术的重要性。作者通过实例展示了如何使用ViewModel解决MVP的回调问题,并介绍了ViewBinding的便捷性。
摘要由CSDN通过智能技术生成

但为什么今天又用Kotlin了呢?

其实,做程序开发是一个不断学习的过程,一天不去接触学习新东西,你就会落后甚至过时,所以说当出现新玩意的时候,你可以不用,但不能不会,只有这样,你才能在职业生涯中游刃有余,就像今天说的这个MVVM框架,以及ViewBinding,我相信很多开发者刚把mvp模式玩6,RxJava,Retrofit弄懂,甚至于有些还在用mvc模式,你就告诉我他们统统过时了???我尼玛,这要累死人的节奏???没办法,程序界发展就是这么快,稍不留神你就已经落伍了,这也是为什么程序员吃青春饭这一说法的由来了,你跟不上节奏,甚至于连去跟节奏的心也没有了,那就只能被淘汰了!

闲话说了这么多,进入正题吧!如果你问我,目前最流行的移动端开发模式是什么,我会毫不犹豫的告诉你:MVP+Rxjava+Retrofit+EventBus…,MVP优点自不必说,但缺点相信现在还在用MVP模式的你会深有体会,可以说成也P,败也P,随着项目的扩大,界面的增多,接口的增多,P会越来越多,P中的回调也会越来愈多,在某个界面想重用某个接口时,如果不想进入回调地狱,就只能再写一个新的P,相当麻烦。还有一个缺点就是,在使用p的时候,总是要实现回调接口,再声明p,然后attach,界面销毁时再调用detach,否则就可能会内存泄漏,这两点是不是不能忍?所以MVVM就出现了,对于MVVM,你可以这么理解,M+V+VM就是把MVP的Presenter换成ViewModel,VM不但可以替代Presenter的功能,还能解决Presenter的两个缺点,上面说过,本篇不作原理性分析,因为这类文章太多了,再分析分析也是多次一举,所以就直接上代码:

ViewModel的简单用法:

在mvp模式下,当我们有服务器交互也就是需要调用接口时,我们便会为此界面创建一个Presenter,同样的,mvvm模式下,我们要为这个界面创建一个ViewModel,例如我们为MainActivity创建MainViewModel :

class MainViewModel : ViewModel() {

}

需要继承ViewModel,并且ViewModel中一般会配合LiveData使用:

class MainViewModel : ViewModel() {

var data = MutableLiveData()

fun getData() {

//模拟数据请求

var result = “请求结果”

data.value = result

}

}

在MainActivity中声明,并使用MainViewModel :

mainViewModel = ViewModelProvider(this).get(MainViewModel::class.java)

mainViewModel.getData()//调用方法,模拟请求数据

mainViewModel.data.observe(this, Observer {//观察data变化,相当于接口请求回调函数

textView.text=it

})

LiveData的observe,就是一个观察者,发现数据有变化时就会立马通知你,参数it就是MainViewModel 中 MutableLiveData(),<>中声明的数据类型的数据,我们不要像presenter一样 需要attach和detach,也不需要些回调接口,只用观察,就这么简单!

再来看ViewBinding:

在这里插入图片描述

文档连接:https://developer.android.google.cn/topic/libraries/view-binding

ViewBinding和DataBinding的区别:

ViewBinding和DataBinding均会生成可用于直接引用视图的绑定类。不过,这两者之间存在明显差异:

1.DataBinding仅处理使用 代码创建的数据绑定布局。

2.ViewBinding不支持布局变量或布局表达式,因此它不能用于在 XML 中将布局与数据绑定。

ViewBinding仅是节省了findview的步骤,并且启用后,每当创建一个xml布局文件,便会自动生成一个对应的ViewBinding类,仅需在界面里的setContentView传入ViewBinding.根视图root即可使用,使用方法为ViewBinding对象.id

private lateinit var binding: ActivityMainBinding

binding = ActivityMainBinding.inflate(layoutInflater)

setContentView(binding.root)

binding.mRecyclerView.layoutManager = LinearLayoutManager(this)

binding.mRecyclerView.adapter = articleAdapter

使用起来也是相当简单,另外项目中封装了相对简单网络请求,

class HttpUtil {

/**

  • 通用网络请求方法

*/

inline fun getData(api: String, onResultListener: OnResultListener) {

GlobalScope.launch(Dispatchers.Main) {

withContext(Dispatchers.IO) {

val data = URL(Const.BASE_URL + api).readText()

val result = Gson().fromJson(data, T::class.java)

withContext(Dispatchers.Main) {

写在最后

本次我的分享也接近尾声了,感谢你们在百忙中花上一下午来这里聆听我的宣讲,希望在接下来的日子,我们共同成长,一起进步!!!

最后放上一个大概的Android学习方向及思路(详细的内容太多了~),提供给大家:

对于程序员来说,要学习的知识内容、技术有太多太多,这里就先放上一部分,其他的内容有机会在后面的文章向大家呈现出来,不过我自己所有的学习资料都整理成了一个文档,一直在不断学习,希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!

为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!

Android架构师之路很漫长,一起共勉吧!

如果你觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

。**

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 18
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值