如何修复:在 Kotlin 中更改布局时按钮“松动”OnClickListener
Posted
技术标签:
【中文标题】如何修复:在 Kotlin 中更改布局时按钮“松动”OnClickListener【英文标题】:How to fix: Buttons "loose" OnClickListener when changing the layout in Kotlin 【发布时间】:2019-10-30 01:17:46 【问题描述】:我在 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)
)
)
嗯,它确实有效。我可以转到第二个布局并切换回第一个布局,但我无法再次打开第二个布局!
我想在切换回主视图后我必须重新定义监听器,所以我创建了两个单独的函数来设置视图。
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 的替代方法?
感谢您的帮助!
【问题讨论】:
从包含的代码来看,很难确定 button_back 设置是否正确。在哪里/何时分配?尝试在使用它的行上设置一个断点,看看它是否是你认为的那样。 【参考方案1】:我怀疑 button_back 设置不正确。
更简洁的方法可能是使用包含两个备选方案的单一布局,然后在点击处理程序中设置备选方案的可见性。
我真的很喜欢 Anko 而不是 XML 来指定布局,因为它使这些行为更具可读性和独立性。
【讨论】:
【参考方案2】:好的,
我想,直接赋值给按钮的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 谢谢!
【讨论】:
以上是关于如何修复:在 Kotlin 中更改布局时按钮“松动”OnClickListener的主要内容,如果未能解决你的问题,请参考以下文章