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