[英]What is the best way to work with android fragment backstack?
我正在使用只有一个 Activity 的多个片段,我想知道如何在背压时管理片段回栈(最好的方法)
任何链接或带有一些代码的小解释都会有所帮助
我建议您使用 Android Jetpack Navigation。 一种处理片段事务的新的和改进的方法。 这比旧的FragmentTransaction
class 方法要好得多。 谷歌自己强烈推荐它。 我现在也在学习它。 下面有教程。
背压时的示例片段回栈:
FragmentsActivity
是将成为所有片段的容器的活动,因此像这样覆盖 FragmentsActivity 的onBackPressed()
-
override fun onBackPressed() {
val fm = supportFragmentManager
if (fm.backStackEntryCount > 0) { //if backstack contain any fragment than pop it
fm.popBackStack()
} else { // call super function normally
super.onBackPressed()
}
}
现在每当启动这样的片段 -
//If you don't want it in backstack
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_container, FragmentA())
.commit()
//If you want it in backstack
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_container, FragmentA())
.addToBackStack(null) //null or any String TAG you want
.commit()
支持片段
当用户按下后退按钮时需要通知您的片段吗?
愚蠢的方式:
我的片段.kt
requireActivity().onBackPressedDispatcher.addCallback(this,
object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
// user pressed back button
}
})
Rockstar 开发者之路:
添加此依赖项:
https://developer.android.com/reference/kotlin/androidx/activity/OnBackPressedDispatcher.html
实现 'androidx.activity:activity-ktx:1.0.0-rc01'
requireActivity().onBackPressedDispatcher.addCallback(this) {
// user pressed back button
}
此查询的常见答案是弹出 backstack 或导航到上一个活动。 如果你不想在某个片段上弹出 backstack 怎么办?
覆盖你的 onbackpressed 来处理这些情况:
override fun onBackPressed() {
when(supportFragmentManager.fragments[0].javaClass.simpleName){
"FragmentOne" -> doActionOne()
"FragmentTwo" -> doActionTwo()
...
else -> supportFragmentManager.popBackStack()
}
}
这将获取您当前片段的名称,然后您决定要做什么。 例如,您可能希望对话询问“您确定要离开吗?”的片段之一。 等等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.