今天第一次使用Navigation就遇到一个问题,搜遍全网都没找到答案,折腾一下午终于解决了,现在把解决方案分享一下:
遇到的问题是从MainActivity跳转到B activity,B activity内部用的Navigation管理fragment,但是需要传递一个id参数,恰恰各大解读Navigation的文章都没有提到如何从B activity将数据传入A fragment,都是A fragment数据和其他比如B fragment或C fragment之间互相传递,解决方法如下:
第一步:在B activity的onCreate()方法执行:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
videoId = getIntent().getIntExtra("videoCourseId", 0);
bundle = new Bundle();
bundle.putInt("videoCourseId", videoId);
setupNavigation();
}
private void setupNavigation() {
NavController controller= Navigation.findNavController(this,R.id.container);
NavGraph graph = controller.getGraph();
NavArgument argument = new NavArgument.Builder()
.setDefaultValue(videoId)
.build();
graph.addArgument("videoCourseId", argument);
}
第二步 在A fragment中
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Map<String, NavArgument> map = NavHostFragment.findNavController(this).getGraph().getArguments();
NavArgument navArgument = map.get("videoCourseId");
int videoCourseId = (int) navArgument.getDefaultValue();
}
如此就将参数传递到fragment中了