我可以以编程方式执行此操作,但我想知道使用android databinding
的最佳方法。
这是我的xml布局。我想增加或减少某个按钮的int值onClick
。我不想在活动课程中点击处理。这是可能的,如果是的话。
在下面的布局中,您可以看到整数值计数。单击按钮时,应更改值计数。
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import type="android.view.View"/>
<variable
name="activity"
type="com.amelio.ui.activities.ActivityProductDetail"/>
<variable
name="count"
type="Integer"/>
</data>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
>
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:onClick="@{() -> count++}"
android:text="Less"
/>
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@{`` + count}"
/>
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/ivBtnPlus"
android:onClick="@{() -> count--}"
android:text="Add"
/>
</LinearLayout>
</layout>
答案 0 :(得分:1)
这取决于你想要实现的目标,如果你想让你的代码更易于测试,我建议你处理XML中的点击,它会在你的Activity或其他类中调用一个函数测试此函数的行为,如果您需要添加更复杂的逻辑,如数据验证,数据库存储等,它会更好。最后,视图应该是虚拟的,它允许您重用代码,就像其他函数处理它一样。
在XML中使用一堆逻辑也是一种不好的做法,会使您的代码无法维护。我建议你阅读MVVM模式和数据绑定Android MVVM Design Pattern
试试这个:
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:onClick="@{() -> activity.myCountMethod()}"
android:text="Less"
/>
在活动中,你必须实现myCountMethod()
,如果你不想参加你的活动,你可以添加另一个你想要的类变量:
<data>
<import type="android.view.View"/>
<variable
name="activity"
type="com.amelio.ui.activities.ActivityProductDetail"/>
<-- Add OtherClass -->
<variable
name="otherClass"
type="com.amelio.ui.activities.OtherClass"/>
<variable
name="count"
type="Integer"/>
</data>
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:onClick="@{() -> otherClass.myCountMethod()}"
android:text="Less"
/>
您可以在此处找到更多信息:
https://developer.android.com/topic/libraries/data-binding/expressions#listener_bindings