有两种方法,简单的一种:
在viewModel中通过传入的view获得context来实现:
class MainActivityVM { 。。。 fun onClick(view: View) { val context = view.context val intent = Intent(context, RecycleViewActivity::class.java) context.startActivity(intent) } 。。。 }
xml:
android:onClick="@{(v) -> mainActivityVM.onClick(v)}"
第二种通过回调,这种方法比较复杂:
首先声明一个DataBindingUtils:
class DataBindingUtils { companion object { var commonMap = ArrayMap<BaseActivity, ArrayMap<Observable, Observable.OnPropertyChangedCallback>>() fun addCallBack(baseActivity: BaseActivity, observable: Observable?, callback: Observable.OnPropertyChangedCallback){ var callbackArrayMap = commonMap[baseActivity] if (callbackArrayMap == null) { callbackArrayMap = ArrayMap() commonMap[baseActivity] = callbackArrayMap } observable?.addOnPropertyChangedCallback(callback) callbackArrayMap[observable] = callback } fun removeCallBack(activity: BaseActivity) { var callbackArrayMap = commonMap[activity] if (callbackArrayMap != null) { for (observable in callbackArrayMap.keys) { observable.removeOnPropertyChangedCallback(callbackArrayMap[observable]) } } } } }
然后在MainActivity中调用:
private fun addCallBack() { DataBindingUtils.addCallBack( this, mainActivityVM?.goToSimple, object : Observable.OnPropertyChangedCallback() { override fun onPropertyChanged(p0: Observable?, p1: Int) { goToNext() } }) } fun goToNext() { startActivity<RecycleViewActivity>() }
接着在viewModel中创建一个回调通知:
class MainActivityVM { var goToSimple = ObservableInt() fun goToNext(view: View) { //view这个值看似没有引用,但是不能删去,删去会报错,可能 和onClicked(view)对应 goToSimple.notifyChange() } 。。。
最后在xml中:
android:onClick="@{mainActivityVM::goToNext}"
参考:
1.复杂方法:https://www.jianshu.com/p/564bb7f21fcc
2.Best Practice:https://stackoverflow.com/questions/40475334/best-practice-for-android-mvvm-startactivity
相关推荐
DataBinding实现RecyclerView的Demo
主要给大家介绍了关于DataBinding onClick的七种点击方式,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
AACustomFont 利用 Databinding 来实现自定义字体功能
一个简单的篮球赛积分APP用以记录展示 ViewModel、LiveData、DataBinding的联合使用。
主要介绍了C#数据绑定(DataBinding)简单实现方法,以简单实例形式简单分析了C#实现数据绑定与读取的方法,具有一定参考借鉴价值,需要的朋友可以参考下
基于BaseRecyclerViewAdapterHelper实现的Recyclerview DataBinding Library,更改数据自动反馈到Recyclerview上。
利用 Databinding 来实现自定义字体功能,这个可以有。.zip,aacustomfont是一个轻量级的xml自定义字体活页夹,直接位于textview、button、edittext、radiobutton、checkbox标记中。该库旨在避免XML中自定义字体的...
关于Android的DataBinding技术分享文档,是私人文档。
Android Databinding 与 RecyclerView 完美结合。Android Databinding 与 RecyclerView 完美结合。
DataBinding在recycleview中的使用,DataBinding在recycleview中的使用
DataBinding的使用与原理
DataBinding中ViewStub例子
关于Jquery扩张库DataBinding的一个更新的版本,比之前的版本增加了不少了功能
作者fuqinwu,源码NBADataBinding,一个简单实现DataBinding实现的NBA新闻查看案例,使用DataBinding库,使用了MVVM框架的学习好Demo。
赠送jar包:cxf-rt-databinding-jaxb-3.0.1.jar; 赠送原API文档:cxf-rt-databinding-jaxb-3.0.1-javadoc.jar; 赠送源代码:cxf-rt-databinding-jaxb-3.0.1-sources.jar; 赠送Maven依赖信息文件:cxf-rt-...
【Jetpack】DataBinding 架构组件 ② ( 字符串拼接函数 | 绑定点击事件函数 | DataBinding 布局中使用 import 标签导入 Java、Kotlin 类 ) https://hanshuliang.blog.csdn.net/article/details/129773150 一、...
完整的android databinding例子, 里面包括了各种输入ui,switch, imageview, button事件, recyclerview的绑定应用及双向绑定. 对于初学者来讲非常简单易懂, 具体说明 ...
基于BRVAH改造而来,支持几乎所有原生RecyclerView.Adapter所能实现的需求,支持DataBinding数据绑定的通用RecyclerView的Adapter
databinding 的事件绑定