资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

JetPack怎么使用Activity中的导航菜单-创新互联

这篇文章主要介绍了JetPack怎么使用Activity中的导航菜单的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JetPack怎么使用Activity中的导航菜单文章都会有所收获,下面我们一起来看看吧。

创新互联公司服务项目包括威海网站建设、威海网站制作、威海网页制作以及威海网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,威海网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到威海省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

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

1. 使用 Activity 中的导航菜单

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

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

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

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

本来的效果:


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

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

@Overrideprotected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  NavHostFragment navHostFragment = (NavHostFragment)getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);  NavController navController = navHostFragment.getNavController();  appBarConfiguration = new AppBarConfiguration.Builder(navController.getGraph()).build();  NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);}

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

Caused by: java.lang.IllegalStateException: Activity com.example.learnjetpack.MainActivity@b516fb8 does not have a NavController set on 2131230962

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


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

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

@Overridepublic boolean onSupportNavigateUp() {  NavHostFragment navHostFragment = (NavHostFragment)getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);  NavController navController = navHostFragment.getNavController();  return NavigationUI.navigateUp(navController, appBarConfiguration)            || super.onSupportNavigateUp();}

接下来看看最终的效果。


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

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

     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.appcompat.app.ActionBar.setTitle(java.lang.CharSequence)' on a null object reference

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

2. 使用 Toolbar

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


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

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

先看看效果:


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

自己设置头部的效果


接下来让其显示内容。

同样在 Activity 中的增加:

@Overrideprotected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  NavHostFragment navHostFragment = (NavHostFragment)getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);  NavController navController = navHostFragment.getNavController();  AppBarConfiguration appBarConfiguration =            new AppBarConfiguration.Builder(navController.getGraph()).build();  Toolbar toolbar = findViewById(R.id.toolbar);  NavigationUI.setupWithNavController(            toolbar, navController, appBarConfiguration);}

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


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

使用 Toolbar 最终的效果

关于“JetPack怎么使用Activity中的导航菜单”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“JetPack怎么使用Activity中的导航菜单”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注创新互联行业资讯频道。


文章名称:JetPack怎么使用Activity中的导航菜单-创新互联
当前网址:http://www.cdkjz.cn/article/cegocs.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220