首页 > 解决方案 > 在 EditText 中关闭片段 onKeyListener

问题描述

对于比我更有经验的人来说,这可能是一个小问题(我从两个月开始就使用 Android),但我真的不明白为什么 OnKeyListener 中的同一行代码不起作用。

例如,我可以通过单击 Fragment 的 Quit 按钮来关闭我的 Fragment,然后我可以返回到我的 Activity。

btnAbbrechen.setOnClickListener {
            activity?.supportFragmentManager?.beginTransaction()?.remove(this)?.commit() // works
        }

无论如何,如果我在同一个片段的 EditText 字段中使用相同的代码,片段将不会关闭。

        eTPalFussNr.apply {
            requestFocus()
            setOnKeyListener(View.OnKeyListener { _, keyCode, event ->
                if (keyCode == KeyEvent.KEYCODE_ENTER && event.action == KeyEvent.ACTION_DOWN) {
//                    activity?.supportFragmentManager?.popBackStack() // nothing happens
                    activity?.supportFragmentManager?.beginTransaction()?.remove(PalFussFragment())?.commit() // nothing happens
                    return@OnKeyListener true
                }
                false
            })
        }

我关注了所有关于 SO 的类似问题的帖子,但找不到正确的答案。所以,请告诉我我错过了什么。

先感谢您。

标签: androidandroid-fragmentskotlin

解决方案


您应该删除this@PalFussFragment而不是尝试删除的新实例PalFussFragment()

requireActivity().supportFragmentManager.beginTransaction()
    .remove(this@PalFussFragment)
    .commit()

更喜欢使用requireActivity()而不是activity?直接使用以确保片段始终附加到活动。


推荐阅读