【发布时间】:2020-05-16 17:45:33
【问题描述】:
我有一个导航图,它使用这个片段作为主要活动 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(); 对导航抽屉进行编程的旧方法,我的导航控制器丢失了!我得到像
navcontroller 未知的目标片段,因为控制器将看到当前显示的主片段,即使不是这种情况(来自调试)
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...
}
因此我的问题是:我应该如何在 Java 中覆盖这个 onNavigationItemSelected 以使导航组件工作?关于这个主题的任何链接或相关文档(Java)?。
【问题讨论】:
-
你读过这个吗? medium.com/@stavro96/…
-
嗨,是的,我正在阅读它,但我无法真正获得 onOptionsItemSelected 的 Kotlin 代码,因为我对 kotlin 不太擅长。这就是我在这个问题上写(In Java)的原因
-
@John Joe 抱歉,我无法将项目上传到 github。但我很欣赏您基于 Kotlin 的文章推荐。如果你在 Java 中有一些指针会很好。
-
如果您使用
NavigationUI.setupWithNavController(),则根本不必覆盖onNavigationItemSelected- 通过启动与您的菜单项具有相同ID的目标,您可以完成所有工作。你到底想做什么? -
@ianhanniballake 非常感谢您的回复(setupWithNavController() 不知道此功能)。好吧,我通常在我的应用程序中使用抽屉菜单,这是我第一次尝试使用 Nav Graph 实用程序。这是一个小型 android 项目(库存和库存),所以我发现 NavGraph 到目前为止非常棒。但是我真的很想将导航抽屉保留在我的应用程序中。无论如何,谢谢,我将尝试阅读有关此 setupWithNavController() 的更多信息
标签: java android android-fragments