繁体   English   中英

使用 android 片段后台堆栈的最佳方法是什么?

[英]What is the best way to work with android fragment backstack?

我正在使用只有一个 Activity 的多个片段,我想知道如何在背压时管理片段回栈(最好的方法)

任何链接或带有一些代码的小解释都会有所帮助

我建议您使用 Android Jetpack Navigation。 一种处理片段事务的新的和改进的方法。 这比旧的FragmentTransaction class 方法要好得多。 谷歌自己强烈推荐它。 我现在也在学习它。 下面有教程。

Android 喷气背包 - 导航

背压时的示例片段回栈:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM