カスタムビューでイベントを新しいAndroidデータバインディングライブラリにバインドしようとしていますが、問題が発生しています。ここでカスタムビューでのカスタムリスナーによるデータバインド
は私のカスタムビューの関連部分です:
public class SuperCustomView extends FrameLayout {
private OnToggleListener mToggleListener;
public interface OnToggleListener {
void onToggle(boolean switchPosition);
}
public void setOnToggleListener(OnToggleListener listener) {
mToggleListener = listener;
}
.../...
}
私は、このカスタムビューを使用して、次のとonToggle
イベントをバインドしようとしている:
toggleStrokeLimitation
がメソッドである
<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"/>
コントローラの
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 ****
私の代わりにapp:onToggle
のandroid:onToggle
を使用しますが、同じエラーを取得しようとしました。
binding events section of the docを読むと、コントローラーからどの方法でもonToggle
イベントに接続できるようになりました。
フレームワークでcontroller.toggleStrokeLimitation
メソッドをSuperCustomView.OnToggleListener
にラップしますか?フレームワークによって提供されている既存のonClick
の後ろにある種類の魔法に関するヒント?テストコードに
onToggle属性http://developer.android.com/tools/data-binding/guide.html#custom_settersのカスタムセッターを実装して、controller.toggleStrokeLimitationがOnToggleListenerタイプのものであることを確認してください。 –
'コントローラーのタイプは何ですか。 toggleStrokeLimitation'?それが 'Object'のようで、あなたのセッターが' OnToggleListener'を期待しています – yigit
あなたはそうですが、私はそれを行うことができますが、イベントをカスタムメソッドにマップしたいと思います。 https://developer.android.com/tools/data-binding/guide.html#binding_eventsで説明されているように、私は推論で質問を編集します。 – fstephany