Android Navigation 从外部activity传递数据到第一个fragment

今天第一次使用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中了

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容