Привязки данных с настраиваемыми слушателями в настраиваемом представлении
Я пытаюсь связать событие в пользовательском представлении с новой библиотекой привязки данных 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
но получите ту же ошибку.
При чтениираздел обязательных событий документаЯ чувствую, что могу подключить любой метод от контроллера кonToggle
событие.
Обертывают ли рамкиcontroller.toggleStrokeLimitation
методы вSuperCustomView.OnToggleListener
? Любой намек на вид магии, которая стоит за существующимonClick
обеспечено рамками?