java - 第一个片段替换为第二个片段后,如何打开导航抽屉
问题描述
我已经创建了默认的 Android Studio Navigation Drawer 项目。默认情况下,我有一个活动和三个主要片段。(首页、画廊、幻灯片),我只尝试使用首页片段。我已将 content_main XML 中的 < 片段 > 替换为
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_fragment_content_main"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/mobile_navigation" />
并将 MainActivity 修改为
//inside onCreate
NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment_content_main);
NavController navController;
if (navHostFragment != null) {
navController = navHostFragment.getNavController();
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
} else {
Log.e("Error", "Failed on NULL NavController");
}
//并修改如下
@Override
public boolean onSupportNavigateUp() {
NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment_content_main);
assert navHostFragment != null;
return NavigationUI.navigateUp(navHostFragment.getNavController(), mAppBarConfiguration)
|| super.onSupportNavigateUp();
}
接下来,我创建了一个 BlankFragment。在 home Fragment 上,我有一个按钮和 onClickListener 用 BlankFragment 替换 HomeFragment 作为
binding.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("onClick: ", "Clicked");
BlankFragment blankFragment = new BlankFragment();
requireActivity().getSupportFragmentManager().beginTransaction()
.replace(R.id.nav_host_fragment_content_main, blankFragment, null)
.addToBackStack("blank").commit();
}
});
现在单击按钮后,片段被替换为空白片段,但是如果我尝试打开导航抽屉,我会从上面的 onSupportNavigateUp() 函数的第一行得到以下错误:
java.lang.ClassCastException: BlankFragment cannot be cast to androidx.navigation.fragment.NavHostFragment
如何解决这个问题。提前致谢。
解决方案
正如 Zain 在评论中所建议的那样,我尝试使用 navController。尝试了以下,它似乎工作,为他人发帖。 https://learntodroid.com/how-to-move-between-fragments-using-the-navigation-component/
推荐阅读
- javascript - 如何处理 React Web App 中的身份验证流程?
- ios - “pod安装”问题
- excel - 从 Firefox 的列中打开各种链接
- vb.net - VB.NET 中的 Microsoft.AspNet.WebApi.Versioning DefaultInlineConstraintResolver
- c# - 无法通过异步任务中的同步Context.Post() 和progress.Report() 接收实时数据
- node.js - Node.js 在 npm start 上找不到模块错误
- oracle - 休眠一对多关联删除
- python - 从数据框python中的列中的数据获取国家/地区
- markdown - Word to Markdown via pandoc:防止段落中的换行符
- python - python del 运算符如何工作?