`

databinding 实现onClick的页面跳转

阅读更多

有两种方法,简单的一种:

在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实现RecyclerView的Demo”中,我们将探讨如何利用DataBinding来优雅地处理RecyclerView的数据展示。 首先,我们需要理解DataBinding的基本概念。DataBinding库是Google推出的一种框架,它可以将...

    DataBinding onClick的七种点击方式

    DataBinding onClick的七种点击方式 DataBinding onClick的七种点击方式是 ...DataBinding onClick 的七种点击方式可以满足不同的需求和场景,但是需要根据实际情况选择合适的方式,以确保代码的可维护性和可读性。

    ViewModel&LiveData&DataBinding联合使用

    在Android开发中,ViewModel、LiveData和DataBinding是Google推荐的Android架构组件,它们共同构建了一个高效、健壮且响应式的应用框架。这三个组件在现代Android应用设计中扮演着至关重要的角色,尤其对于处理用户...

    Android Databinding 与 RecyclerView 完美结合

    现在,将Databinding与RecyclerView结合,可以实现更优雅的数据绑定和列表渲染。首先,你需要在RecyclerView的Adapter中使用Databinding。创建一个继承自`RecyclerView.Adapter`的类,如`MyAdapter`,并在其中包含一...

    DataBinding中ViewStub例子

    在DataBinding中结合使用ViewStub,可以实现更灵活的视图管理。 **DataBinding库的介绍** DataBinding库通过在XML布局文件中定义绑定表达式,将数据自动绑定到对应的UI组件上,从而避免了手动设置视图的值。它引入...

    android官方数据绑定框架DataBinding使用(2)

    在Android开发中,DataBinding库是Google推出的一种官方数据绑定框架,它可以帮助开发者更方便地实现视图与数据模型之间的绑定,从而简化UI逻辑,提高代码的可读性和可维护性。本文将深入探讨DataBinding的基本用法...

    Android DataBinding ViewPage + Fragment 封装

    在Android开发中,DataBinding、ViewPager和Fragment是三个非常重要的组件,它们分别负责数据绑定、页面滑动和模块化视图管理。本教程将深入探讨如何将这些技术结合使用,实现一个高效、灵活的封装解决方案。 **...

    DataBinding的使用与原理

    DataBinding 是 Android 开发中一个强大的工具,通过它可以实现数据模型与用户界面的自动绑定,简化了代码结构,提高了开发效率。理解 DataBinding 的使用方法和原理,有助于构建更加优雅、易于维护的 Android 应用...

    利用 Databinding 来实现自定义字体功能,这个可以有.zip

    利用 Databinding 来实现自定义字体功能,这个可以有。.zip,aacustomfont是一个轻量级的xml自定义字体活页夹,直接位于textview、button、edittext、radiobutton、checkbox标记中。该库旨在避免XML中自定义字体的...

    DataBinding

    关于Android的DataBinding技术分享文档,是私人文档。

    DataBinding Demo 事件绑定

    在DataBinding中,事件绑定是通过在XML布局文件中使用`android:onClick`属性来实现的。例如,你可以这样绑定一个点击事件: ```xml android:layout_width="wrap_content" android:layout_height="wrap_...

    DataBinding2使用手册

    DataBinding2极大地简化了前端开发过程中数据绑定的工作量,使得开发者能够更加专注于业务逻辑的实现。通过灵活的配置选项,开发者可以根据实际需求定制数据展示的形式和效果,从而提升用户体验。希望本文档能帮助...

    C#数据绑定(DataBinding)简单实现方法

    C#中的数据绑定(DataBinding)是.NET框架提供的一种强大机制,它允许用户界面(UI)元素与数据源之间建立动态连接,使UI能够自动反映出数据源的变化。数据绑定简化了应用程序开发,尤其是在构建用户界面时,使得...

    Android databinding 双向绑定

    Android DataBinding库是Google推出的一种数据绑定框架,它旨在简化Android应用中的UI绑定,特别是对于MVVM(Model-View-ViewModel)设计模式的实现。双向绑定是DataBinding库的一个核心特性,它允许视图(View)和...

    Android数据绑定DataBinding

    - **事件绑定**:可以直接在XML中绑定点击事件,如`android:onClick="@{()-&gt; viewModel.onItemClick()}"`。 - **Observable数据**:结合`LiveData`或`ObservableField`,实现数据实时更新。 - **双向数据绑定**:...

    DataBinding基本使用

    3. **MVVM模式**: 结合Android Architecture Components中的ViewModel,DataBinding是实现MVVM架构的重要工具。 4. **测试友好**: 使用DataBinding的代码更容易进行单元测试和UI测试。 **四、注意事项** 1. **...

    Android DataBinding的官方双向绑定示例

    在 Android DataBinding 中,双向绑定可以通过在布局文件中使用 `@={}` 语法来实现。例如,在一个简单的用户名绑定示例中,我们可以使用以下代码: ```xml ``` 在上面的代码中,我们使用 `@={}` 语法...

    DataBinding在recycleview中的使用

    数据绑定(DataBinding)是Android开发中的一种技术,它能够帮助开发者更简洁、直观地处理UI与数据模型之间的交互。在RecyclerView中应用DataBinding,可以极大地提高代码的可读性和可维护性,减少样板代码,并使得...

    MVVM之DataBinding的使用

    此外,还可以利用-livedata-结合DataBinding实现数据的双向绑定,自动更新UI,这是MVVM架构中非常重要的一个特性。 总结一下,DataBinding是Android开发中的一个重要工具,它简化了UI和数据间的交互,让代码更加...

Global site tag (gtag.js) - Google Analytics