首页 > 解决方案 > 单击按钮后如何切换到另一个 XML 布局?

问题描述

我想要一个带有逻辑的 kotlin 文件,并且我希望允许用户在两​​种不同的 XLM 布局之间切换(程序逻辑仍然相同,但单击按钮时按钮的布局应更改)。

我只是将 setContentView 函数添加到此按钮的 setOnClickListener 以加载 activity_main_second_layout.xml 布局。

PS。activity_main_second_layout.xml 和 activity_main.xml 几乎一样,我只是改变了元素的位置(不是元素的名称)

button_switch_to_the_second_design.setOnClickListener {

setContentView(R.layout.activity_main_second_layout);

}

当点击按钮时,voala,布局真的变成了第二个。但是程序的功能不再起作用,逻辑消失了。似乎我需要以某种方式恢复程序的运行以使代码再次运行而不会中断,包括变量丢失。

标签: kotlinsetcontentview

解决方案


有很多方法可以做到这一点。

在我看来,您不应该尝试在运行时更改布局 - 这是可能的,但您必须覆盖setContentView并重新绑定所有视图和所有侦听器(或以其他方法进行,这将在更改布局后调用)。

所以......像这样:

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.


推荐阅读