簡體   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