Как переключиться на другой макет XML после нажатия на кнопку? - PullRequest
0 голосов
/ 15 февраля 2019

Я хотел бы иметь один файл kotlin с логикой, и я бы хотел, чтобы пользователи могли переключаться между двумя различными макетами XLM (логика программы все та же, но расположение кнопок должно быть изменено при нажатии на кнопку).

Я просто добавляю функцию setContentView в setOnClickListener для этой кнопки, чтобы загрузить макет activity_main_second_layout.xml.

PS.Activity_main_second_layout.xml почти такой же, как Activity_main.xml, я только изменил положение элементов (не имена элементов)один.НО функционал программы больше не работает, логика исчезает.Похоже, мне нужно как-то возобновить выполнение программы, чтобы код снова работал без прерываний, включая потерю переменных.

1 Ответ

0 голосов
/ 15 февраля 2019

Есть много способов сделать это.

По моему мнению, вы не должны пытаться изменить макет во время выполнения - это возможно, но вы должны переопределить setContentView и перепривязать все представления и всех слушателей.(или сделайте это другим способом, который будет вызван после изменения макета).

Итак ... Sth, как это:

fun sth() {
    setContentView(R.layout.activity_main_second_layout)
    rebindLayout(R.layout.activity_main_second_layout)
}

fun rebindLayout(@LayoutRes layoutId: Int) {
    when (layoutId) {
        R.layout.activity_main_first_layout -> { /* rebind views here */ }
        R.layout.activity_main_second_layout -> { /* rebind views here */ }
    }
}


Другой, лучше я думаю, это создатьнезависимые фрагменты и изменение фрагмента через fragmentManager.Другие подходы - ViewAnimator, ViewSwitcher.

...