Я пытаюсь установить OnClickListener
для макета <include>
d, но получаю ошибку привязки данных во время компиляции, утверждая, что привязка данных "Не удается найти установщик для атрибута 'android: onClick' с типом параметра android.view.View.OnClickListener ".
Контекст здесь заключается в том, что я использую привязку данных для раздувания включенного макета, чтобы я мог передавать в него значения из viewModel
, который я связал свключая макет.
Я пробовал различный синтаксис для выражения привязки данных:
@{viewModel::onClickFunction}
@{viewModel.onClickFunction}
@{() -> viewModel.onClickFunction()}
@{(view) -> viewModel.onClickFunction()}
@{_ -> viewModel.onClickFunction()}
Я пробовал все вышеперечисленное с onClickFunction
как функцией, а также как OnClickListener
object.
Другие связанные вопросы по переполнению стека, кажется, решают эту проблему, очищая проект для регенерации файлов привязки данных, но это не сработало для меня.
Ниже приведены соответствующие фрагменты кода:
viewModel
class MyViewModel() {
val onClickFunctionAsAListener: OnClickListener = object:OnClickListener{
override fun onClick(v: View?) {
//Do something
}
}
fun onClickFunction() {
//Do something
}
}
Включая макет
<layout>
<data>
<variable name="viewModel" type="full.package.name.MyViewModel"/>
</data>
<LinearLayout>
<include
layout="@layout/included_layout"
android:onClick="@{viewModel.onClickListener}"
app:customAttribute="@{`someText`}/>
</LinearLayout>
</layout>
Включена планировкаout
<layout>
<data>
<variable name="customAttribute" type="String"/>
</data>
<TextView
layout="@layout/included_layout"
android:text="@{customAttribute}"/>
</layout>