前言当我们在 interface BackPressedListener {
fun onBackPressed(): Boolean
}
class ExampleFragment : Fragment(), BackPressedListener {
override fun onBackPressed(): Boolean {
return if (handleBackPress) {
// 具体处理事件
true
} else {
false
}
}
}
class ExampleActivity : AppCompatActivity() {
override fun onBackPressed() {
val currentFragment = getCurrentFragment()
if (!currentFragment.onBackPressed()) {
super.onBackPressed()
}
}
} 这种写法确实能够解决问题,并且可能是我们目前正在使用的,唯一不足就是稍显繁琐,需要开发者自行实现接口,拦截事件,写一些样板代码。 新方案也许是谷歌终于意识到上面的方案并没有十分优雅,终于在 androidx.activity: 1.1.0 中引入了 class ExampleFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
requireActivity().onBackPressedDispatcher.addCallback(
//这个LifecycleOwner可以不用也行
//viewLifecycleOwner,
object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
if (handleBackPress) {
// 具体执行返回事件
} else {
isEnabled = false
requireActivity().onBackPressed()
}
}
})
}
} 上面的代码是不是看起来要简单一些了,至少目前看起来是的。这段代码主要利用 问题1. 为什么要在添加的 |
一种新的在 fragment 中处理按键返回的方法
最新推荐文章于 2025-04-18 09:24:23 发布
本文介绍了如何在Android中使用新的OnBackPressedDispatcher类简化Fragment中处理返回键事件,通过添加回调并在Fragment中专注于业务逻辑,减少了样板代码。



1万+

被折叠的 条评论
为什么被折叠?



