Составной компонент не восстанавливает состояние представлений - PullRequest
0 голосов
/ 07 апреля 2019

Я делаю составной компонент с помощью кнопки.

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, вручную сохранил текст компонента и снова установил его, он работает таким образом, но это не так.

У меня сложилось впечатление, что компоненты будут обрабатывать свои собственные состояния. Может, я что-то не так сделал с конструкторами / инфляцией?

1 Ответ

1 голос
/ 07 апреля 2019

TextView (и все его подклассы, поэтому Button тоже) не сохраняет текст при вращении автоматически, если freezesText не установлен на true.
Из документации :

Если установлено, текстовое представление будет включать свой текущий полный текст внутри замороженной сосульки в дополнение к метаданным, таким как текущая позиция курсора.По умолчанию это отключено;это может быть полезно, когда содержимое текстового представления не хранится в постоянном месте, таком как поставщик контента.Для EditText он всегда включен, независимо от значения атрибута.

Итак, что вы должны сделать в основном:

<Button 
     ... 
     android:freezesText="true" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...