2017-11-01 22 views
0

私のアプリでは奇妙な問題に直面しています。ボタンの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> 

その他すべてバインディングは完全に正常に動作します。またアンドロイドスタジオは、使用されているように見えるメソッドを作成します。私は何を間違えているのですか?

答えて

2

作業中のケースと同様に、ボタンにandroid:clickable="true"を設定してみてください。代わりにクリックリスナーを使用して、クリックイベントをキャッチできます。また、フィールドとメソッドのバインディングについてはButter Knife(詳細はクリックしてください)を使用することができます(これは私が今使っているものです)。

+0

ありがとうございます:)ボタンも覚えていませんでした –

+0

私はそれが助けてうれしいです! – gbruscatto

関連する問題