Я пытаюсь использовать двустороннюю привязку данных в пользовательском представлении, которое содержит SeekBar.Макет довольно прост, но мне нужно повторно использовать его по всему проекту, следовательно, обернуть его в пользовательский вид / компонент
<androidx.constraintlayout.widget.ConstraintLayout ... />
<TextView .../>
<TextView .../>
<SeekBar
android:id="@+id/ds_seekbar"
android:layout....
android:max="9"
android:min="0"
android:progress="0"
</androidx.constraintlayout.widget.ConstraintLayout>
Код поддержки выглядит так (уменьшено)
CustomView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr), View.OnClickListener {
init {
LayoutInflater.from(context).inflate(R.layout.custom_view, this, true)
ds_description.setOnClickListener(this)
}
override fun onClick(view: View) {
//onClick implementation
}
}
Я могу сделать привязку во ViewModel для макета, где будет использоваться это настраиваемое представление, с помощью BindingAdapter с настраиваемым атрибутом (например, app: seekbar), но настраиваемое представление будет использоваться несколько раз, и я 'Я предпочел бы иметь большую логику, необходимую для представления, и иметь более «легкую» обработку в ViewModel.
Я читаю Двухстороннее связывание данных Android с пользовательским представлением и пользовательским атрибутом и кучу других статей, которые, кажется, немного отличаются, но на одну и ту же тему, однако независимо от того, как я написал геттер и сеттеры, я всегда сталкиваюсь с исключением из kapt, что он не может найти геттер / сеттер.
Либо я не правильно аннотирую методы, либо они имеют неправильные подписи.
В идеале я хочу иметь что-то вроде:
CustomView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr), View.OnClickListener, SeekBar.OnProgressChangedListener {
... ds_seekbar.setOnProgressChangedListener(this)
А затем в главном макете есть приложение: прогресс (или даже лучше, если кто-то может показать, как это делается на Android: прогресс) напользовательский вид для привязки при передаче моего объекта.