我正在尝试将工具栏绑定到导航控制器,因为我正在使用以下代码:
NavigationUI.setupWithNavController(toolbar, NavHostFragment.findNavController(nav_host))
在菜单文件中,我提供了应用程序应导航到的片段的ID,如下所示:
<item
android:id="@+id/menuFragment"
android:orderInCategory="100"
android:title="@string/action_settings"
app:showAsAction="never" />
,我有一个简单的导航图文件,如下所示:
<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/homeFragment">
<fragment
android:id="@+id/homeFragment"
android:name="com.vapoyan.myapplication.HomeFragment"
android:label="fragment_home"
tools:layout="@layout/fragment_home" >
<action
android:id="@+id/action_homeFragment_to_menuFragment"
app:destination="@id/menuFragment" />
</fragment>
<fragment
android:id="@+id/menuFragment"
android:name="com.vapoyan.myapplication.MenuFragment"
android:label="fragment_menu"
tools:layout="@layout/fragment_menu" />
</navigation>
有人有经验或可以建议我如何解决此问题,导航组件是否支持工具栏?
任何示例代码或参考?
答案 0 :(得分:0)
我在应用中使用了一个导航抽屉,但是我认为这足以满足您的要求:
此刻,我正在使用以下android库: 在我的build.gradle
implementation 'android.arch.navigation:navigation-fragment:1.0.0-alpha07'
implementation 'android.arch.navigation:navigation-ui:1.0.0-alpha07'
在我的活动中
class MainActivity : BaseActivity() {
@SuppressLint("RestrictedApi")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
val navController = Navigation.findNavController(this, /*ur nav controller ID*/)
// Set up ActionBar
setSupportActionBar(/*ur toolbar*/)
NavigationUI.setupActionBarWithNavController(this, navController)
}
}
您可以在此处查看文档,您可以找到更多信息:https://developer.android.com/topic/libraries/architecture/navigation/navigation-ui#create_a_toolbar
答案 1 :(得分:0)
最后,由于Google CodeLab
,我找到了解决方案我所缺少的是:
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return NavigationUI.onNavDestinationSelected(item, NavHostFragment.findNavController(nav_host))
|| super.onOptionsItemSelected(item)
}
此外,如果您想获得后退按钮支持,则需要在onCreate
方法中添加:
NavigationUI.setupWithNavController(toolbar, NavHostFragment.findNavController(nav_host))
基本上,据我了解,仅bt为菜单项提供正确的片段id
并调用setupWithNavController
应该可以,但是这种假设是不正确的,或者可能是在当前版本中( 1.0.0-alpha07 ),Google员工做了一些更改。因此,现在一切正常。
如果您发现有一种更短的方法:)或更好的方法:)让我知道。
答案 2 :(得分:0)
除了以上答案。确保导航和商品的ID均匹配。
android:id="@+id/menuFragment"
我对此很挂念,因为每个元素都有单独的ID。