我在我的应用中面临一个奇怪的问题。我无法将按钮的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让方法看起来像正在使用。我做错了什么?
答案 0 :(得分:2)
尝试在按钮中设置android:clickable="true"
,就像在工作案例中一样。您可以使用单击侦听器来捕获click事件。此外,您可以使用Butter Knife(单击以获取更多信息)进行字段和方法绑定(这就是我现在使用的内容)。