今天第一次使用Navigation就遇到一個問題贱呐,搜遍全網(wǎng)都沒找到答案唆姐,折騰一下午終于解決了跨琳,現(xiàn)在把解決方案分享一下:
遇到的問題是從MainActivity跳轉(zhuǎn)到B activity谱醇,B activity內(nèi)部用的Navigation管理fragment薄湿,但是需要傳遞一個id參數(shù),恰恰各大解讀Navigation的文章都沒有提到如何從B activity將數(shù)據(jù)傳入A fragment象颖,都是A fragment數(shù)據(jù)和其他比如B fragment或C fragment之間互相傳遞佩厚,解決方法如下:
第一步:在B activity的onCreate()方法執(zhí)行:
@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();
}
如此就將參數(shù)傳遞到fragment中了