Я делаю составной компонент с помощью кнопки.
class CreateConfigNodeView : ConstraintLayout {
constructor(context: Context) : super(context) {
loadLayout()
}
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
loadLayout()
}
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
loadLayout()
}
private fun loadLayout() {
inflate(context, R.layout.compound_view_layout, this)
}
При такой базовой компоновке:
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/inline_create_operator_controls"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">
<Button
android:id="@+id/aid_for_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</merge>
Я успешно установил текст кнопки (/ textview / что угодно) программно. Когда я поворачиваю экран, текст кнопки сбрасывается до значения, установленного в xml.
Я реализовал onSaveInstanceState / onRestore, вручную сохранил текст компонента и снова установил его, он работает таким образом, но это не так.
У меня сложилось впечатление, что компоненты будут обрабатывать свои собственные состояния. Может, я что-то не так сделал с конструкторами / инфляцией?