我有一个导航图,它将这个片段作为主活动XML的主页使用。
<fragment
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
class="androidx.navigation.fragment.NavHostFragment"
app:navGraph="@navigation/main_nav_graph"
app:defaultNavHost="true"/>我有一个带有菜单的抽屉布局,当我点击导航抽屉按钮时,我无法使导航工作(它从主片段中运行,但当我点击抽屉按钮时就不行了),如果我使用旧的方式编程导航抽屉:getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new_fragment).commit();,我的导航控制器丢失了!我会犯这样的错误
if控制器未知的目标片段,因为控制器将看到当前显示的主片段,即使情况不是这样(从调试中)
public boolean onNavigationItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.action_1:
//doesn't work when it current fragment doesnt match the
//action_fromfragmentx_to_fragmenty
Navigation.findNavController(this,R.id.fragment_container)
.navigate(R.id.action_fromfragmentx_to_fragmenty);
break;
//Other menu options...
}因此,我的问题是:如何在中重写这个onNavigationItemSelected以使导航组件工作?有关这个主题的链接或相关文档(用Java语言)吗?.
发布于 2020-01-31 04:26:33
导航组件在NavigationUI工件中在navigation-ui工件中提供了一个助手类。根据用导航文档更新UI组件,您可以使用setupWithNavController()方法通过将目标项绑定到菜单项自动将菜单项连接到在导航图中设置的导航目的地。
如果
MenuItem的id与目的地的id匹配,则NavController可以导航到该目的地。
因此,您根本不需要onNavigationItemSelected实现,也不需要执行任何FragmentTransactions。只需确保菜单XML中的android:id="@+id/fragment_y"与导航XML中的android:id="@+id/fragment_y"匹配,并调用setupWithNavController()
NavigationView navView = findViewById(R.id.nav_view);
// This is what sets up its own onNavigationItemSelected
NavigationUI.setupWithNavController(navView, navController);https://stackoverflow.com/questions/59997397
复制相似问题