如何向Bottom Navigation的起始Fragment传递navArgs参数?
在MainActivity的onCreate方法中完成以下操作:
获取NavController实例
先找到布局中的NavHostFragment,再拿到对应的NavController:NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager() .findFragmentById(R.id.nav_host_fragment_activity_main); NavController navController = navHostFragment.getNavController();构建参数Bundle
把需要传递的email和jwt打包进Bundle:Bundle args = new Bundle(); args.putString("email", "实际用户邮箱地址"); args.putString("jwt", "实际的jwt令牌内容");给起始Fragment设置默认参数
加载导航图,为HomeFragment设置默认参数后重新绑定给NavController:NavInflater navInflater = navController.getNavInflater(); NavGraph navGraph = navInflater.inflate(R.navigation.mobile_navigation); // 替换成你导航图中HomeFragment的实际ID int homeFragmentId = R.id.navigation_home; navGraph.findNode(homeFragmentId).setDefaultArguments(args); navController.setGraph(navGraph);
额外注意事项
- 确认导航图(
mobile_navigation.xml)中HomeFragment的参数配置为必填状态(无默认值),示例配置如下:<fragment android:id="@+id/navigation_home" android:name="com.example.yourapp.HomeFragment" android:label="@string/title_home" tools:layout="@layout/fragment_home"> <argument android:name="email" app:argType="string" app:nullable="false" /> <argument android:name="jwt" app:argType="string" app:nullable="false" /> </fragment> - 后续切换底部导航栏再切回HomeFragment时,参数会自动保留。若需要动态更新参数,切换时调用
navController.navigate(homeFragmentId, 新的参数Bundle)即可,注意避免重复创建Fragment实例。
内容的提问来源于stack exchange,提问作者imin
相关产品推荐
相关产品推荐

