文章目录
- Android DataBinding学习(三):DataBinding点击处理
- 一.DataBinding的点击学习
- 1. `clickData::click`
- 2. `@{(view)->clickData.click(view)}`
- 3.`()->clickData.click(context)`
- 4.`()->clickData.click()`
- 4.`@{(view)->clickData.click(view, msg)}`
- 5.`@{(view)->clickData.click(view, num)}`
- 6.`@{()->clickData.click(2)}`
- 7.`@{(view)->clickData.click(2, view)}`
- 8.`@{() -> viewModel.click(viewModel.value)}`
- 二.总结
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)
。反之,则不需要加上。