Android DataBinding学习(三):DataBinding点击处理(kotlin版本)

Android DataBinding学习(三):DataBinding点击处理

一.DataBinding的点击学习

本篇文章主要是记录DataBinding onClick的写法,通过DataBinding的onClick的绑定相对于setOnClickListener(@Nullable View.OnClickListener l)的方式减少代码量,减轻Activity的臃肿。

UI界面:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>
        <import type="com.work.binding.practice.data.ClickData"/>
        <variable
            name="clickData"
            type="ClickData" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <Button
            android:id="@+id/click"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:background="@color/colorAccent"
            android:text="点击"
            android:onClick="@{clickData::click}"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

数据类:

class ClickData {
    
    

    fun click(view: View){
    
    
        Toast.makeText(view.context, "click", Toast.LENGTH_SHORT).show()
    }

Activity:

class ClickBindActivity:AppCompatActivity() {
    
    

    val binding:ActivityClickBinding by lazy {
    
    
        DataBindingUtil.setContentView(this, R.layout.activity_click)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
    
    
        super.onCreate(savedInstanceState)
        binding.clickData = ClickData()
    }
}

1. clickData::click

kotlin:

	fun click(view: View){
    
    
        Toast.makeText(view.context, "click", Toast.LENGTH_SHORT).show()
    }

xml:

android:onClick="@{clickData::click}"

2. @{(view)->clickData.click(view)}

kotlin:

	fun click(view: View){
    
    
        Toast.makeText(view.context, "click", Toast.LENGTH_SHORT).show()
    }

xml:

android:onClick="@{(view)->clickData.click(view)}"

3.()->clickData.click(context)

kotlin:

	fun click(context:Context){
    
    
        Toast.makeText(context, "click", Toast.LENGTH_SHORT).show()
    }

xml:

<!--可以直接传递context-->
android:onClick="@{()->clickData.click(context)}"

4.()->clickData.click()

kotlin:

	fun click(){
    
    
        Log.e("tag", "click")
    }

xml:

<!--可以直接传递context-->
android:onClick="@{()->clickData.click()}"

4.@{(view)->clickData.click(view, msg)}

kotlin:

	fun click(view:View, msg:String){
    
    
        Toast.makeText(view.context, "click::$msg", Toast.LENGTH_SHORT).show()
    }
}

xml:

<!--可以使用String.valueOf-->
android:onClick="@{(view)->clickData.click(view, String.valueOf(2))}"

5.@{(view)->clickData.click(view, num)}

kotlin:

	fun click(view: View, value: Int){
    
    
        Toast.makeText(view.context, num.toString(), Toast.LENGTH_SHORT).show()
    }
}

xml:

android:onClick="@{(view)->clickData.click(view, 2)}"

6.@{()->clickData.click(2)}

kotlin:

	fun click(num: Int){
    
    
        Log.e("tag", "click::$num")
    }

xml:

android:onClick="@{()->clickData.click(2)}"

7.@{(view)->clickData.click(2, view)}

kotlin:

	fun click(num: Int, view: View){
    
    
        Toast.makeText(view.context, "click::$num", Toast.LENGTH_SHORT).show()
    }

xml:

android:onClick="@{(view)->clickData.click(2, view)}"

8.@{() -> viewModel.click(viewModel.value)}

kotlin:

	fun click(value:Int){
    
    
        Log.e("tag", "click::$value")
    }

xml:

		<data>
        	<import type="xxx.xxx.ViewModel"/>
        	<variable
            	name="viewModel"
            	type="ViewModel" />
    	</data>
		<Button
            android:id="@+id/click"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:background="@color/colorAccent"
            android:text="点击"
            android:onClick="@{() -> viewModel.click(viewModel.value)}"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

上面的代码加上View也是可以的比如,
kotlin:

	fun click(view:View, value:Int){
    
    
        Log.e("tag", "click::$value")
    }

xml:

		<data>
        	<import type="xxx.xxx.ViewModel"/>
        	<variable
            	name="viewModel"
            	type="ViewModel" />
    	</data>
		<Button
            android:id="@+id/click"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:background="@color/colorAccent"
            android:text="点击"
            android:onClick="@{(view) -> viewModel.click(view, viewModel.value)}"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

二.总结

通过上面代码的展示,可以大概总结下:如果click代码里面有view:View,那么,你就需要在xml代码中加上view:(view)->xxx.click(view)。反之,则不需要加上。

猜你喜欢

转载自blog.csdn.net/RQ997832/article/details/122651814