android 绑定中的自定义事件属性 app:onMyEvent
Cusom event attributes in android bindings app:onMyEvent
有没有什么方法可以使用绑定库将自定义 onSomeEventListener
连接到属性? onClick
提供的例子很简单,都是用'on'前缀和单方法接口监听器,'add'前缀和更复杂的场景呢?
假设我想在 RecyclerView.addOnItemTouchListener, determining the child view was touched from SimpleOnItemTouchListener.onTouchEvent 上使用自定义连线逻辑并将其传递到我的视图模型,我该如何实现?
我想以这样的方式结束:
<RecyclerView
app:onItemTouch="@{handlers::recyclerViewOnItemTouch}"/>
public class Handlers {
public void recyclerViewOnItemTouch(View view) { ... }
}
使用 BindingAdapter 和 InverseBindingListener 通知绑定框架有关您的自定义 属性 更新时,是否有类似方法?
@BindingAdapter("app:someAttrChanged")
public static void setListener(View view, InverseBindingListener listener)
经过一番调查和反复试验,我找到了解决办法。
当然,您需要在 Activity
或 Fragment
中激活 Binding
并为其设置 ClickHandler
的实例,并拥有在 xml
中为 ClickHandler
设置变量。假设你已经知道了,我会继续:
魔术的一部分是使用 app:addOnItemTouchListener
作为 RecyclerView
:
<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;
}
}
有没有什么方法可以使用绑定库将自定义 onSomeEventListener
连接到属性? onClick
提供的例子很简单,都是用'on'前缀和单方法接口监听器,'add'前缀和更复杂的场景呢?
假设我想在 RecyclerView.addOnItemTouchListener, determining the child view was touched from SimpleOnItemTouchListener.onTouchEvent 上使用自定义连线逻辑并将其传递到我的视图模型,我该如何实现?
我想以这样的方式结束:
<RecyclerView
app:onItemTouch="@{handlers::recyclerViewOnItemTouch}"/>
public class Handlers {
public void recyclerViewOnItemTouch(View view) { ... }
}
使用 BindingAdapter 和 InverseBindingListener 通知绑定框架有关您的自定义 属性 更新时,是否有类似方法?
@BindingAdapter("app:someAttrChanged")
public static void setListener(View view, InverseBindingListener listener)
经过一番调查和反复试验,我找到了解决办法。
当然,您需要在 Activity
或 Fragment
中激活 Binding
并为其设置 ClickHandler
的实例,并拥有在 xml
中为 ClickHandler
设置变量。假设你已经知道了,我会继续:
魔术的一部分是使用 app:addOnItemTouchListener
作为 RecyclerView
:
<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;
}
}