单击按钮后如何切换到另一个XML布局?

时间:2019-02-15 08:27:19

标签: kotlin setcontentview

我想要一个带有逻辑的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时,布局实际上更改为第二个布局。 但是程序的功能不再起作用,逻辑消失了。看来我需要以某种方式恢复程序的运行,以使代码再次运行而不会发生中断,包括丢失变量。

1 个答案:

答案 0 :(得分:0)

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

我认为您不应该尝试在运行时更改布局-这是可能的,但是您必须重写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更改片段。 其他人-ViewAnimatorViewSwitcher