无法绑定按钮onClick

时间:2017-11-01 16:46:51

标签: android button data-binding onclick

我在我的应用中面临一个奇怪的问题。我无法将按钮的onClick事件绑定到方法。这是我的代码:

public class BookingViewModel extends BaseObservable {
    public void onAddInvite(View view) {
        invitationList.add(new Person(name, number, email)); 
        notifyPropertyChanged(BR.invitationsText);
    }
}

的xml:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>

        <variable
            name="bookingViewModel"
            type="it.jgrassi.roombooking.viewmodel.BookingViewModel" />
    </data>
    <Button
            android:id="@+id/button_book"
            android:layout_width="89dp"
            android:layout_height="40dp"
            android:layout_marginBottom="8dp"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            android:text="Book"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            android:enabled="@{bookingViewModel.bookingEnabled}"
            android:onClick="@{bookingViewModel::onAddInvite}"/>
</layout>

我发现它很奇怪,因为在同一个应用程序中我有类似的情况处理列表项上的onClick:

public class ItemRoomViewModel extends BaseObservable{
public void onItemClick(View view) {
        //do stuff
    }
}

的xml:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>

        <variable
            name="roomViewModel"
            type="it.jgrassi.roombooking.viewmodel.ItemRoomViewModel" />
    </data>

    <android.support.constraint.ConstraintLayout
        android:id="@+id/item_room"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?android:attr/selectableItemBackground"
        android:clickable="true"
        android:onClick="@{roomViewModel::onItemClick}"
        android:paddingBottom="8dp"
        android:paddingTop="8dp">
</layout>

所有其他绑定工作完全正常。也是android studio让方法看起来像正在使用。我做错了什么?

1 个答案:

答案 0 :(得分:2)

尝试在按钮中设置android:clickable="true",就像在工作案例中一样。您可以使用单击侦听器来捕获click事件。此外,您可以使用Butter Knife(单击以获取更多信息)进行字段和方法绑定(这就是我现在使用的内容)。