【发布时间】:2021-11-30 19:55:34
【问题描述】:
我已经创建了默认的 Android Studio Navigation Drawer 项目。
默认情况下,我有一个活动和三个主要片段。 (首页、画廊、幻灯片)、
我只是在尝试使用 Home Fragment。
我已将
<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。 在主页 Fragment 上,我有一个按钮和 onClickListener 将 HomeFragment 替换为 BlankFragment 为
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
如何解决这个问题。提前致谢。
【问题讨论】:
-
您在使用导航组件时不应该手动进行片段事务。使用 navController 执行此操作
-
谢谢,会尝试这样做。但不确定什么是最好的方法,尝试了以下方法,它似乎有效,为他人发帖。 learntodroid.com/…
标签: java android android-fragments fragment navigation-drawer