Skip to content

点击事件

dataBinding中如何设置监听点击事件?

点击事件 onClick

准备监听方法

MutableDemoVM类为例

public class MutableDemoVM {
    // ... 

    public void onClickBack(View view) {
        // ...
    }

    public void onClickAdd(View view) {
        // ...
    }
}

里面的2个方法,onClickBack(View view)onClickAdd(View view)用来设置点击监听。

可以看到有一个View作为参数。这是因为要对应上View.OnClickListener的onClick(View v)方法。

    public interface OnClickListener {
        /**
         * Called when a view has been clicked.
         *
         * @param v The view that was clicked.
         */
        void onClick(View v);
    }

layout中设置监听方法

layout中,设置android:onClick监听

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

    <data>
        <variable
            name="vm"
            type="com.rustfisher.tutorial2020.databinding.data.MutableDemoVM" />
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:orientation="horizontal">

            <ImageView
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:onClick="@{vm.onClickBack}"
                android:padding="10dp"
                android:src="@drawable/ic_arrow_back_black_24dp" />

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <Button
                android:layout_width="100dp"
                android:layout_height="50dp"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="20dp"
                android:onClick="@{vm::onClickAdd}"
                android:text="+" />
        </LinearLayout>

    </LinearLayout>
</layout>

可以看到,设置android:onClick时,用点@{vm.onClickBack}或者用2个冒号@{vm::onClickAdd}来引用方法都可以。

在activity中设置数据

public class MutableDemo1 extends AppCompatActivity {

    private ActMutableDemo1Binding binding;
    private MutableDemoVM mVM = new MutableDemoVM();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        binding = DataBindingUtil.setContentView(this, R.layout.act_mutable_demo1);
        binding.setVm(mVM);
        // ...
    }

}

RadioButton OnCheckedChangeListener

在类中定义好选择的方法,方法签名和CompoundButton.OnCheckedChangeListener.onCheckedChanged(CompoundButton buttonView, boolean isChecked)一致。

    public void choose1(CompoundButton buttonView, boolean isChecked) {
        // ...
    }

    public void choose2(CompoundButton buttonView, boolean isChecked) {
        // ...
    }

在layout中设置使用方法。

<RadioGroup
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onCheckedChanged="@{viewModel.choose1}"
        android:text="选项1"/>

    <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onCheckedChanged="@{viewModel.choose2}"
        android:text="选项2" />
</RadioGroup>