我需要找出用戶從哪個片段切換到另一個片段。我想我應該使用片段名稱,但是如何獲得該名稱?還是我的方法不是很可靠,還有其他一些選擇?
PS:我使用NavHostFragment和 Kotlin
uj5u.com熱心網友回復:
您會考慮在目的地/片段之間傳遞一些資料;您會立即將傳入的資料視為整數;并為每個片段創建常量整數,無論??何時進行導航,然后傳遞為當前片段分配的常量。
例子:
通過在導航期間使用安全的 Args進行操作和傳遞資料。
假設我們要導航FragmentA到FragmentB:
的NavGraph應具有一個操作表示的方向和一個引數被設定為導航期間原點片段:
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@ id/nav_graph"
app:startDestination="@id/mainFragment">
<fragment
android:id="@ id/fragmentA"
android:name="......FragmentA"
android:label="....">
<action
android:id="@ id/action_fragment_a_to_fragment_b"
app:destination="@id/fragmentB" />
<argument
android:name="previousFragment"
android:defaultValue="-1"
app:argType="integer" />
</fragment>
<fragment
android:id="@ id/fragmentB"
android:name="......FragmentB"
android:label="....">
<argument
android:name="previousFragment"
android:defaultValue="-1"
app:argType="integer" />
</fragment>
</navigation>
創建與目標片段對應的常量:
companion object {
const val FRAGMENT_A = 101
const val FRAGMENT_B = 102
}
以及從 FragmentA 到 FragmentB 的導航操作:
做導航@FragmentA:
findNavController().navigate(
FragmentADirections.actionFragmentAToFragmentB()
.setPreviousFragment(FRAGMENT_A)
然后檢查@FragmentB:
val args: FragmentBArgs = FragmentBArgs.fromBundle(requireArguments())
when (val previousFragment = args.previousFragment) {
FRAGMENT_A -> {
Log.d("LOG_TAG", "$previousFragment") // Should print 101
}
// Complete the rest of fragment cases
}
uj5u.com熱心網友回復:
您可以將OnDestinationChangedListener添加到您的 NavController 以跟蹤片段更改。
val navhostContainer = supportFragmentManager.findFragmentById(R.id.nav_host_container)
controller = navhostContainer!!.findNavController()
controller.addOnDestinationChangedListener(listener)
val listener = NavController.OnDestinationChangedListener{
controller, destination, arguments ->
println("Destination Observe: ${destination.label}")
}
當片段更改時,將觸發偵聽器。
我希望該解決方案有助于解決您的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/324308.html
標籤:安卓 科特林 android-fragments android-架构-导航
