这篇文章主要介绍了JetPack怎么使用Activity中的导航菜单的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JetPack怎么使用Activity中的导航菜单文章都会有所收获,下面我们一起来看看吧。
创新互联公司服务项目包括威海网站建设、威海网站制作、威海网页制作以及威海网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,威海网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到威海省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!提前做好准备,打开文件 res/navigation/
下你的 xml
文件,点击每一个 Fragment
页面,给它们设置对应的标题,在 Design
下的右边的 id
下,有一个属性是 label
,填写上对应的名称就可。
1. 使用 Activity
中的导航菜单
默认 Activity
的导航菜单显示的是标题和返回按钮,而返回按钮是返回到上一个 Activity
,而我们的 Navigation
是在一个 Activity
中的,假如当前 Activity
位于栈的最上层,我学习的代码就是让所有的 Fragment
都在 MainActivity
中,由于无论我怎样跳转都在 MainActivity
中。所以现在有两个两个任务:
首先跳转到下一页以后会出现返回按钮;
点击返回按钮能够正常返回上一个
Navigation
页面。
因为第二个需要在第一个完成的基础上才能看得出效果,所以我们按上面的步骤进行。
本来的效果:
默认效果
打开承载了 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
。
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();}
接下来看看最终的效果。
最终的效果
我还遇到了一个问题,之前我的 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
。
没有bar的效果
打开对应的 Activity
下的布局文件,我这里是 MainActivity
,布局文件为 activity_layout.xml
,在 androidx.fragment.app.FragmentContainerView
上增加:
先看看效果:
自己设置头部的效果
接下来让其显示内容。
同样在 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
,这样即可以轻松实现上面的效果,其余的代码就不需要,看效果:
使用 Toolbar 最终的效果
关于“JetPack怎么使用Activity中的导航菜单”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“JetPack怎么使用Activity中的导航菜单”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注创新互联行业资讯频道。
文章题目:JetPack怎么使用Activity中的导航菜单-创新互联
本文网址:http://lswzjz.com/article/cegocs.html