[英]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.