我在Kotlin中有两种布局,每一种都有一个Button,我只想在两者之间切换。所以我在两者上都添加了一个OnClickListener
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button_foward.setOnClickListener(View.OnClickListener {
setContentView(R.layout.second)
button_back.setOnClickListener(View.OnClickListener {
setContentView(R.layout.activity_main)
})
})
嗯,它实际上正在工作。我可以转到第二个布局并切换回第一个布局,但是我无法再次打开第二个布局!
我认为更改回主视图后必须重新定义Listener,因此我创建了两个单独的函数来设置视图。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
this@MainActivity.createMainScreen()
})
}
fun createMainScreen(){
setContentView(R.layout.activity_main)
button_foward.setOnClickListener(View.OnClickListener {
this@MainActivity.createSecondScreen()
})
}
fun createSecondScreen(){
setContentView(R.layout.second)
button_back.setOnClickListener(View.OnClickListener {
this@MainActivity.createMainScreen()
})
}
当我尝试摆脱Java中的相同问题时,这种方式有效,但是在Kotlin中,我仍然只能对每个Button使用一次。
我该如何解决?在重新定义按钮之前(是否必须)可以重置按钮吗?
或者是否可以使用setContentView替代方法?
谢谢您的帮助!
答案 0 :(得分:0)
我怀疑button_back的设置不正确。
一种更清洁的方法可能是使用一个包含两个替代方案的单一布局,然后在点击处理程序中设置替代方案的可见性。
我真的很喜欢用Anko而不是XML来指定布局,因为它使这种行为更易读和独立。
答案 1 :(得分:0)
好吧
我想,直接分配给按钮的ID,例如
button_foward.setOnClickListener(View.OnClickListener {
this@MainActivity.createSecondScreen() })
应产生与
相同的结果this.findViewById<Button>(R.id.button_foward).setOnClickListener(View.OnClickListener {
this@MainActivity.createSecondScreen()})
我在某个教程的某个地方看到了第一个代码示例,并认为这将是Kotlin常用的方法。甚至Android Studio都建议我这样做,但是在这种情况下,只有第二种方法可以满足我的要求。
好吧,问题解决了:D 谢谢!