JetPack怎么使用Activity中的导航菜单(activity,jetpack,开发技术)

时间:2024-04-29 04:43:04 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

提前做好准备,打开文件res/navigation/下你的xml文件,点击每一个Fragment页面,给它们设置对应的标题,在Design下的右边的id下,有一个属性是label,填写上对应的名称就可。

1. 使用Activity中的导航菜单

默认Activity的导航菜单显示的是标题和返回按钮,而返回按钮是返回到上一个Activity,而我们的Navigation是在一个Activity中的,假如当前Activity位于栈的最上层,我学习的代码就是让所有的Fragment都在MainActivity中,由于无论我怎样跳转都在MainActivity中。所以现在有两个两个任务:

  1. 首先跳转到下一页以后会出现返回按钮;

  2. 点击返回按钮能够正常返回上一个Navigation页面。

因为第二个需要在第一个完成的基础上才能看得出效果,所以我们按上面的步骤进行。

本来的效果:

JetPack怎么使用Activity中的导航菜单

默认效果
打开承载了FragmentActivityjava文件,我这里是MainActivity.java,在onCreate方法下增加如下代码:

@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);NavHostFragmentnavHostFragment=(NavHostFragment)getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);NavControllernavController=navHostFragment.getNavController();appBarConfiguration=newAppBarConfiguration.Builder(navController.getGraph()).build();NavigationUI.setupActionBarWithNavController(this,navController,appBarConfiguration);}

android 官方获取navController是直接获取的Navigation.findNavController(this, R.id.nav_host_fragment);,假如很不幸你也这样写了,那么就会出现的错误:

Causedby:java.lang.IllegalStateException:Activitycom.example.learnjetpack.MainActivity@b516fb8doesnothaveaNavControllerseton2131230962

只需修改成我上面那样即可以处理这个问题,至于起因我现在解释不了,以后会补全。上面的代码就是托管本来ActivityBar

JetPack怎么使用Activity中的导航菜单

Navigation托管Activity后的效果
这样第一个完成了,至于第二个,只要要重写本来Activity的返回的逻辑:

@OverridepublicbooleanonSupportNavigateUp(){NavHostFragmentnavHostFragment=(NavHostFragment)getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);NavControllernavController=navHostFragment.getNavController();returnNavigationUI.navigateUp(navController,appBarConfiguration)||super.onSupportNavigateUp();}

接下来看看最终的效果。

JetPack怎么使用Activity中的导航菜单

最终的效果
我还遇到了一个问题,之前我的MainActivitytheme设置android:theme="@style/Theme.AppCompat.Light.NoActionBar",结果出现了下面的错误:

Causedby:java.lang.NullPointerException:Attempttoinvokevirtualmethod'voidandroidx.appcompat.app.ActionBar.setTitle(java.lang.CharSequence)'onanullobjectreference

把这个改掉就可,由于设置NoActionBar了,结果又让显示,诚然手机就会耍小脾气。这个是在AndroidManifest.xml中设置的。

2. 使用 Toolbar

这种方式就是不用默认的,而是自己设置;所以这个很容易想到需要将MainActivitytheme改为上面会出现错误的情况。打开AndroidManifest.xml文件,修改对应的Activitytheme,修改成@style/Theme.AppCompat.Light.NoActionBar

JetPack怎么使用Activity中的导航菜单

没有bar的效果
打开对应的Activity下的布局文件,我这里是MainActivity,布局文件为activity_layout.xml,在androidx.fragment.app.FragmentContainerView上增加:

<androidx.appcompat.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="0dp"android:layout_height="?attr/actionBarSize"app:layout_collapseMode="pin"app:layout_constraintBottom_toTopOf="@+id/nav_host_fragment"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"/>

先看看效果:


JetPack怎么使用Activity中的导航菜单

自己设置头部的效果

接下来让其显示内容。

同样在Activity中的增加:

@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);NavHostFragmentnavHostFragment=(NavHostFragment)getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);NavControllernavController=navHostFragment.getNavController();AppBarConfigurationappBarConfiguration=newAppBarConfiguration.Builder(navController.getGraph()).build();Toolbartoolbar=findViewById(R.id.toolbar);NavigationUI.setupWithNavController(toolbar,navController,appBarConfiguration);}

这种方式Navigation会自动托管Toolbar,这样即可以轻松实现上面的效果,其余的代码就不需要,看效果:

JetPack怎么使用Activity中的导航菜单

使用 Toolbar 最终的效果

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:JetPack怎么使用Activity中的导航菜单的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:HTTP服务压力测试工具及相关术语是什么下一篇:

11 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18