簡體   English   中英

僅當單擊底部菜單項並仍然使用 setupWithNavController 時,我們如何處理底部菜單導航項單擊?

[英]How do we handle bottom menu nav items clicks only when bottom menu items are clicked and still use setupWithNavController?

我們如何僅在單擊底部菜單項並仍然使用 setupWithNavController 時跟蹤底部菜單導航項的點擊? 目前使用底部導航視圖 2.4.0-alpha05,我們有一個用例來跟蹤底部導航點擊進行分析,底部導航設置如下

binding.bottomNavigationView.setupWithNavController(navController)

如果我在下面使用,則底部導航選擇將停止工作。

binding.bottomNavigationView.setOnItemSelectedListener { 
        //track clicks
        true
    } 

復制源代碼NavigationUi.setupWithNavController並像下面這樣更改它的替代方法,但是我不確定這是否有影響,例如,如果谷歌稍后添加改進或更改 setupWithNavController,那么該項目將錯過該更改:

    private fun setupWithNavController(
        navigationBarView: NavigationBarView,
        navController: NavController,
        onItemSelected: ((Int) -> Unit)
    ) {
        navigationBarView.setOnItemSelectedListener { item ->
            onItemSelected.invoke(item.itemId)
            NavigationUI.onNavDestinationSelected(
                item,
                navController
            )
        }
        val weakReference = WeakReference(navigationBarView)
        navController.addOnDestinationChangedListener(
            object : NavController.OnDestinationChangedListener {
                override fun onDestinationChanged(
                    controller: NavController,
                    destination: NavDestination,
                    arguments: Bundle?
                ) {
                    val view = weakReference.get()
                    if (view == null) {
                        navController.removeOnDestinationChangedListener(this)
                        return
                    }
                    view.menu.forEach { item ->
                        if (destination.matchDestination(item.itemId)) {
                            item.isChecked = true
                        }
                    }
                }
            })
    }

您可以從 BottomNavigationView 獲取 MenuItem:

bottomNavigationView?.menu?.findItem(R.id.your_menu_item_id) // by menu item id

或者

bottomNavigationView?.menu?.get(index) // by index

獲得 MenuItem 后,您可以訂閱單擊 MenuItem:

bottomNavigationView?.menu?.findItem(R.id.your_menu_item_id)?.setOnMenuItemClickListener {
    // TODO: add your code
    return@setOnMenuItemClickListener false
}

NavigationComponent 運行良好,您可以處理對 BottomNavigationView 項目的點擊。

暫無
暫無

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

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