一、Navigation 主线程错误NavController 的 navigate 方法必须在主线程上调用newThread(()-{Navigation.findNavController(view).navigate(R.id.action_AFragment_to_BFragment);}).start();# 输出结果 java.lang.IllegalStateException: Method setCurrentState must be called on the main threadNavControllernavControllerNavigation.findNavController(view);newThread(()-{navController.navigate(R.id.action_AFragment_to_BFragment);}).start();# 输出结果 java.lang.IllegalStateException: Method setCurrentState must be called on the main thread二、Navigation 携带数据1、使用 Bundle跳转方BundlebundlenewBundle();bundle.putInt(userId,1);Navigation.findNavController(view).navigate(R.id.action_AFragment_to_BFragment,bundle);接收方BundleargumentsgetArguments();intuserId-1;if(arguments!null){userIdarguments.getInt(userId,-1);}2、使用 Safe Args1Setting项目级 build.gradlebuildscript{repositories{google()}dependencies{classpathandroidx.navigation:navigation-safe-args-gradle-plugin:2.6.0}}模块级 build.gradleplugins{idandroidx.navigation.safeargs}2Navigationfragmentandroid:idid/AFragmentandroid:namecom.my.navigation2.fragment.AFragmentandroid:labelfragment_atools:layoutlayout/fragment_aactionandroid:idid/action_AFragment_to_BFragmentapp:destinationid/BFragment//fragmentfragmentandroid:idid/BFragmentandroid:namecom.my.navigation2.fragment.BFragmentandroid:labelfragment_btools:layoutlayout/fragment_bactionandroid:idid/action_BFragment_to_AFragmentapp:destinationid/AFragment/argumentandroid:nameuserIdapp:argTypeintegerandroid:defaultValue-1//fragment3Test跳转方BundlebundlenewBFragmentArgs.Builder().setUserId(100).build().toBundle();Navigation.findNavController(view).navigate(R.id.action_AFragment_to_BFragment,bundle);// 另一种写法NavDirectionsactionAFragmentDirections.actionAFragmentToBFragment().setUserId(100);Navigation.findNavController(view).navigate(action);接收方BFragmentArgsargsBFragmentArgs.fromBundle(requireArguments());intuserIdargs.getUserId();Log.i(TAG,userId: userId);3、使用 ViewModel1ViewModelpublicclassSharedViewModelextendsViewModel{privatefinalMutableLiveDataIntegeruserIdnewMutableLiveData();publicvoidsetUserId(intid){userId.setValue(id);}publicLiveDataIntegergetUserId(){returnuserId;}}2Test跳转方SharedViewModelsharedViewModelnewViewModelProvider(requireActivity()).get(SharedViewModel.class);sharedViewModel.setUserId(100);Navigation.findNavController(view).navigate(R.id.action_AFragment_to_BFragment);接收方SharedViewModelsharedViewModelnewViewModelProvider(requireActivity()).get(SharedViewModel.class);IntegeruserIdsharedViewModel.getUserId().getValue();Log.i(TAG,userId: userId);4、使用全局变量1StorepublicclassDataHolder{privatestaticDataHolderinstance;privateintuserId;privateDataHolder(){}publicstaticDataHoldergetInstance(){if(instancenull){instancenewDataHolder();}returninstance;}publicvoidsetUserId(intuserId){this.userIduserId;}publicintgetUserId(){returnuserId;}publicvoidclear(){this.userId-1;}}2Test跳转方DataHolderdataHolderDataHolder.getInstance();dataHolder.setUserId(100);Navigation.findNavController(view).navigate(R.id.action_AFragment_to_BFragment);接收方DataHolderdataHolderDataHolder.getInstance();intuserIddataHolder.getUserId();Log.i(TAG,userId: userId);