【发布时间】:2015-11-30 19:04:33
【问题描述】:
我正在尝试使用新的 Android 数据绑定库绑定自定义视图上的事件,但遇到了问题。
这是我的自定义视图的相关部分:
public class SuperCustomView extends FrameLayout {
private OnToggleListener mToggleListener;
public interface OnToggleListener {
void onToggle(boolean switchPosition);
}
public void setOnToggleListener(OnToggleListener listener) {
mToggleListener = listener;
}
.../...
}
我正在尝试使用此自定义视图并将onToggle 事件与以下内容绑定:
<data>
<variable
name="controller"
type="com.xxx.BlopController"/>
</data>
<com.company.views.SuperCustomView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:onToggle="@{controller.toggleStrokeLimitation}"
app:custom_title="Blah"
app:custom_summary="Bloh"
app:custom_widget="toggle"/>
toggleStrokeLimitation 是控制器上的一个方法:
public void toggleStrokeLimitation(boolean switchPosition) {
maxStrokeEnabled.set(switchPosition);
}
编译时出现这个错误:
> java.lang.RuntimeException: Found data binding errors.
****/ data binding error ****msg:Cannot find the setter for attribute 'app:onToggle' with parameter type java.lang.Object. file:/path/to/androidapp/app/src/main/res/layout/fragment_stroke.xml loc:36:35 - 36:67 ****\ data binding error ****
我尝试使用android:onToggle 而不是app:onToggle,但得到了同样的错误。
阅读binding events section of the doc 时,我觉得我可以将控制器的任何方法连接到onToggle 事件。
框架是否将controller.toggleStrokeLimitation 方法包装到SuperCustomView.OnToggleListener 中?关于框架提供的现有onClick 背后的魔法类型的任何提示?
【问题讨论】:
-
尝试为 onToggle 属性 developer.android.com/tools/data-binding/… 实现自定义设置器,并确保 controller.toggleStrokeLimitation 是 OnToggleListener 类型
-
controller.toggleStrokeLimitation的类型是什么?好像是Object而你的 setter 期望OnToggleListener -
你说得对,我可以这样做,但我想将事件映射到自定义方法。就像developer.android.com/tools/data-binding/… 中解释的那样,我将根据我的推理编辑问题。
标签: android data-binding android-databinding