databinding implements onClick page jump

There are two ways, the simple one:

In the viewModel, the context is obtained by the incoming view:

 

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)}"

 

 

 

The second is through the callback, this method is more complicated:

 First declare a 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])
                }
            }
        }
    }


}

 Then call in MainActivity:

 

 

private fun addCallBack() {

        DataBindingUtils.addCallBack (
                this,
                mainActivityVM? .goToSimple,
                object : Observable.OnPropertyChangedCallback() {
                    override fun onPropertyChanged(p0: Observable?, p1: Int) {
                        goToNext()
                    }

                })
    }

fun goToNext() {
        startActivity<RecycleViewActivity>()
    }

 Then create a callback notification in the viewModel:

 

 

class MainActivityVM {

    var goToSimple = ObservableInt()

    fun goToNext(view: View) { //The value of view does not seem to be referenced, but it cannot be deleted. If it is deleted, an error will be reported. It may be
Corresponds to onClicked(view)
        goToSimple.notifyChange()
    }

。。。

 And finally in the xml:

 

android:onClick="@{mainActivityVM::goToNext}"

 

refer to:

1. Complex method: https://www.jianshu.com/p/564bb7f21fcc

2.Best Practice:https://stackoverflow.com/questions/40475334/best-practice-for-android-mvvm-startactivity

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326019892&siteId=291194637