3

バインディングライブラリを使用してカスタムonSomeEventListenerを属性に結びつける方法はありますか? onClickの例はシンプルで、接頭辞接頭辞と単一メソッドのインターフェースリスナーをすべて使用しています。接頭辞の追加や複雑なシナリオはどうでしょうか?android bindingsアプリのCusomイベント属性:onMyEvent

RecyclerView.addOnItemTouchListenerでカスタムワイヤアップロジックを使用して、子ビューがSimpleOnItemTouchListener.onTouchEventから変更されていると判断し、これを私のビューモデルに渡すとどうしたらいいですか?私はこのようなもので終わるしたい

:カスタムプロパティBindingAdapterを使用して更新し、InverseBindingListenerについてのバインディングフレームワークを通知する際に

<RecyclerView 
    app:onItemTouch="@{handlers::recyclerViewOnItemTouch}"/> 

public class Handlers { 
    public void recyclerViewOnItemTouch(View view) { ... } 
} 

はアプローチに似たものはありますか?

@BindingAdapter("app:someAttrChanged") 
public static void setListener(View view, InverseBindingListener listener) 

答えて

1

いくつかの調査と試行錯誤の末、解決策が見つかりました。

はもちろん、あなたのActivityFragmentBindingを活性化し、それにClickHandlerのインスタンスを設定し、ClickHandlerのためにあなたのxmlにそれのための変数を持っている必要があります。あなたはすでに私は続けるだろう、ということを知っていると仮定すると:魔法の

一部はRecyclerViewためapp:addOnItemTouchListenerを使用している:

<android.support.v7.widget.RecyclerView 
    android:id="@+id/rec_view" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:addOnItemTouchListener="@{clickHandler.touchListener}"/> 

他の部分はClickHandler.classです:

public class ClickHandler { 

    public RecyclerView.OnItemTouchListener touchListener; 

    public ClickHandler(){ 
     //initialize the instance of your touchListener in the constructor 
     touchListener = new RecyclerView.SimpleOnItemTouchListener(){ 
      @Override 
      public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e)  { 
       //allow clicks 
       return true; 
      } 

      @Override 
       public void onTouchEvent(RecyclerView rv, MotionEvent e) { 
       //check if it is working/check if we get the touch event: 
       Log.d("onTouchEvent", "RecView: " + rv.getId() + "\nMotionEvent: "+ e.getAction()); 
      } 
     }; 
    } 

    /* last but not least: a method which returns the touchlistener. 
     You can rename the method, but don't forget to rename the attribute in the xml, too. */ 
    public RecyclerView.OnItemTouchListener touchListener(){ 
     return touchListener; 
    } 
} 
関連する問題