当前位置: 首页 > 知识库问答 >
问题:

如何修复:在Kotlin中更改布局时按钮“松动”OnClickListener

颜森
2023-03-14

我在 Kotlin 中有两个布局,每个布局都有一个按钮,我只想在两者之间切换。所以我在两者中都添加了一个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中,我仍然只能使用每个按钮一次。

我该如何解决这个问题?在重新定义按钮之前,我可以(必须)重新设置按钮吗?

或者可能有替代的setContentView的使用?

谢谢你的帮助!

共有2个答案

方轩昂
2023-03-14

可以

我想,直接分配到按钮的id就像

button_foward.setOnClickListener(View.OnClickListener {       
                this@MainActivity.createSecondScreen() })

应该会导致相同的结果

this.findViewById<Button>(R.id.button_foward).setOnClickListener(View.OnClickListener {
            this@MainActivity.createSecondScreen()})

我在某个教程的某个地方看到了第一个代码示例,并认为这将是常见的静态编程语言方法。甚至Android Studio也建议我这样做,但在这种情况下,似乎只有第二种方法符合我的要求。

好吧,问题解决了:D谢谢!

曹铭晨
2023-03-14

我怀疑button_back设置不正确。

一个更简洁的方法可能是拥有一个包含两个备选方案的布局,然后在单击处理程序中设置备选方案的可见性。

我真的很喜欢 Anko 而不是 XML 来指定布局,因为它使这些行为更具可读性和独立性。

 类似资料:
  • 我想在我的应用程序中应用不同的主题。我想更改导航栏和浮动操作按钮的颜色。 现在我可以更改导航栏的颜色,但浮动操作按钮的颜色没有变化。当主题更改时,如何动态更改工厂的颜色? 风格: 绝妙的: 晶圆厂选择器: 谢谢你...

  • 我错过了什么? 为了便于阅读,这里提供了一个要点,并附带了一个测试用例:https://Gist.github.com/teyc/5668517

  • 对于我的应用程序,我需要HTML布局来记录事件。时间中的时间列以毫秒为单位出现,但我需要它的格式是dd-mm-yyyy:hh:mm:ss.sssz。我该怎么做?因为log4j2的HTML布局不支持pattern属性。所以我不能为时间设定新的模式。

  • 我在一个HTML页面上有2个按钮组。每组3到4个按钮(使用引导程序的按钮)。我想使用Javascript在没有onclick的情况下更改点击时的颜色按钮。 用户将单击组1中的任何按钮(单击“将颜色改为绿色”时),然后单击组2中的按钮,而不取消选择组1中的按钮。 null null

  • 问题内容: 我想在我的 底栏布局的中间添加Facebook Messenger,例如超大按钮,但困惑如何添加。 我正在使用ahbottomnavigation库来制作我的底栏。 问题答案: 我只是试图使其简单而不是专业类型。看这里: BottomSheetLayout文件- : ActivityLayout - Output: 根据您的想法改变价值和设计。 示例仅是一个演示,并不包含OP要求的确切

  • 如何更改所有按钮的文本颜色? 我知道我可以像下面这样设置背景色: