gpt4 book ai didi

android - android 绑定(bind)应用程序中的自定义事件属性 :onMyEvent

转载 作者:太空狗 更新时间:2023-10-29 13:57:40 27 4
gpt4 key购买 nike

有没有办法使用绑定(bind)库将自定义 onSomeEventListener 连接到属性?为 onClick 提供的示例很简单,它们都使用'on'前缀和单一方法接口(interface)监听器,'add'前缀和更复杂的场景呢?

假设我想在 RecyclerView.addOnItemTouchListener 上使用自定义接线逻辑, 确定 subview 是从 SimpleOnItemTouchListener.onTouchEvent 被触动的并将其传递给我的 View 模型,我该如何实现?

我想以这样的方式结束:

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

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

使用 BindingAdapter 和 InverseBindingListener 通知绑定(bind)框架有关您的自定义属性更新时,是否有类似的方法? ?

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

最佳答案

经过一些调查和反复试验,我找到了解决方案。

当然,您需要在ActivityFragment 中激活Binding 并设置ClickHandler 实例 添加到它,并在 clickHandlerxml 中为它设置一个变量。假设您已经知道这一点,我将继续:

魔术的一部分是为 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;
}
}

关于android - android 绑定(bind)应用程序中的自定义事件属性 :onMyEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38145783/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com