У меня есть пользовательский линейный макет и XML-файл с 3 флажками.Пользовательский линейный макет выглядит примерно так:
class AdvancedBox : LinearLayout, DefineExchangesDialog.DefineExchangesDialogListener {
private lateinit var mBinding: AdvancedBoxBinding
private lateinit var viewModel: GlobalConfigViewModel
constructor(c: Context) : super(c) {
initLayout()
}
constructor(c: Context, a: AttributeSet) : super(c, a) {
initLayout()
}
private fun initLayout() {
val inflater = LayoutInflater.from(context)
mBinding = AdvancedBoxBinding.inflate(inflater)
}
override fun getRootView(): View {
return mBinding.root
}
fun setViewModel(viewModel: GlobalConfigViewModel){
mBinding.viewModel = viewModel
}
override fun onFinishInflate() {
super.onFinishInflate()
//cbVolumeChange is an id defined in advanced_box.xml
cbVolumeChange.setOnClickListener(this::onShowAdvanced)
cbExchanges.setOnClickListener(this::onShowAdvanced)
cbPriceFilter.setOnClickListener(this::onShowAdvanced)
}
Проблема заключается в том, что установка onClickListener для любого из флажков в onFinishInflate () вызовет исключение NullPointerException.Я думал, что переопределение getRootView () будет решением, но это не сработало.Вот что может сработать:
val root = mBinding.root
root.cbVolumeChange ...
Но я бы не хотел этого делать.Итак, как правильно использовать расширение Android Kotlin с привязкой данных в моем случае?