簡體   English   中英

Android Jetpack Navigation組件與BottomAppBar菜單交互

[英]Android Jetpack Navigation component and BottomAppBar menu interaction

我試圖在我的項目中實現Navigation同時在我的主要活動中有Top App BarBottom App Bar

這是我所做的步驟。

在我的活動布局中

<android.support.design.widget.CoordinatorLayout>
       <android.support.design.widget.AppBarLayout>
           <android.support.v7.widget.Toolbar/>
       </android.support.design.widget.AppBarLayout>

  <fragment
        android:id="@+id/navigation_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="?attr/actionBarSize"
        app:defaultNavHost="true"
        app:navGraph="@navigation/navigation_graph" />

<android.support.design.bottomappbar.BottomAppBar/>

我有 2 個片段,假設FragmentStartFragmentToGoTo所以在我的導航圖中我有

<navigation
    android:id="@+id/navigation_graph.xml"
    app:startDestination="@id/fragmentStart">

    <fragment
        android:id="@+id/fragmentStart"
        android:name="com.FragmentStart">
        <action
            android:id="@+id/goToFragment"
            app:destination="@id/fragmentToGoTo" />
    </fragment>
    <fragment
        android:id="@+id/fragmentToGoTo"
        android:name="com.FragmentToGoTo"
        />
</navigation>

Bottom App Bar菜單包含以下項目:

 <item
        android:id="@id/fragmentToGoTo"
        android:title="Title"
        app:showAsAction="always" />

然后在我的活動中

val navController = Navigation.findNavController(this, R.id.navigation_fragment)
myBottomBar.replaceMenu(R.menu.menu_with_nav_item)

myBottomBar.setupWithNavController(navController)
//or I've also tried
//NavigationUI.setupWithNavController(myBottomBar, navController, null)

發生的情況是,當單擊菜單項時,導航不會觸發,從我讀過的內容來看,如果菜單項與導航圖中的片段具有相同的 ID,則它應該直接工作。 如果我添加OnMenuItemClickListener我可以在菜單上按做findNavController(R.id.navigation_fragment).navigate(R.id.fragmentToGoTo)並且它可以工作。 我只是希望有一種自動方式,因為它應該可用。

我究竟做錯了什么?

我是 Kotlin 的新手,但我遇到了同樣的問題。

您還必須將您的menu與您的navController

override fun onOptionsItemSelected(item: MenuItem): Boolean {
  val navController = findNavController(R.id.fragmentContainer)
  return item.onNavDestinationSelected(navController) ||
    super.onOptionsItemSelected(item)
}

只需將這些代碼粘貼到您的MainActivity.kt

我從 Android 文檔中得到了代碼: https : //developer.android.com/guide/navigation/navigation-ui#Tie-navdrawer

暫無
暫無

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

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