簡體   English   中英

Android Jetpack導航:如何在OnNavigatedListener中獲取目標的片段實例?

[英]Android Jetpack Navigation: How to get fragment instance of destination in OnNavigatedListener?

我在android開發中使用Jetpack導航組件(一個活動,許多片段)。

我想在OnNavigatedListener中獲取目標的片段實例,如下所示。

可能嗎?

class MainActivity : AppCompatActivity() {

    private lateinit var navController: NavController

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(this, R.layout.activity_main)
        navController = Navigation.findNavController(this, R.id.nav_host_fragment)
        navController.addOnNavigatedListener { controller, destination ->
            // Here
        }
    }
}

更新:場景

我想在每次導航的活動中獲取片段的屬性(或從方法返回的值)。

例如,

val fragment = getFragmentInstanceFromDestination()
myActionBar.visible = fragment.getActionBarVisible()

如果您使用的是1.0.0-alpha07版本,過去可以執行以下操作:

 (destination as? FragmentNavigator.Destination)?.let { destinationClass ->
            val isNewFullscreen = destinationClass.fragmentClass.superclass == FullScreenFragment::class.java
//... adjust paddings and hide action bar, etc.

這是我為一個具有兩個Fragment超類的Activity應用程序所采用的方法,其中一個是FullScreenFragment(您可以看到在示例中使用的那個),它隱藏了操作欄和導航欄以及NavigationFragment(名稱是令人困惑,但這一個顯示導航欄和操作欄)。

問題在於,您還需要調整默認導航片段的填充,因為FullScreenFragments會占據整個屏幕,而NavigationFragment應該同時考慮操作和導航欄。

現在使用新的1.0.0-alpha08FragmentNavigatio.Destination.fragmentClass不再可用,所以我仍然在考慮如何解決這個問題。 我正在考慮使用destination.id == R.id.someFullScreenFragment ,它肯定不像我現在所擁有的那樣hacky,但我必須跟蹤一個id列表。

無論哪種方式,據我所知,獲取Fragment本身的實例是不可能的,你可以做的最好的事情是推斷目的地並讓你的單個活動相應地編排視圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM