按钮单击数据绑定更改Int值

时间:2018-05-09 13:31:30

标签: android android-layout android-databinding

我可以以编程方式执行此操作,但我想知道使用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>

1 个答案:

答案 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