繁体   English   中英

使用导航架构组件启动带有结果的片段

[英]launch a fragment with result using navigation architecture components

下面是我如何使用 android navigatingfragment A navigationfragment B


    @Override
    public void onClick(View view) {

        int viewId = view.getId();

        if (viewId == R.id.btn_proceed) {
          
          Navigation.findNavController(view).navigate(R.id.fragmentB);

        }
    }

我想实现从fragmentBfragmentA的结果返回,例如 fragmentB 有一个EditText ,用户输入文本并返回到 fragmentA 并使用 android 架构导航组件设置为TextView

根据返回结果的文档,我能够使用下面的代码实现我所要求的。

声明一个NavController

private NavController navController;

onViewCreated方法内部


navController = Navigation.findNavController(view);

        MutableLiveData<String> liveData = Objects.requireNonNull(navController.getCurrentBackStackEntry())
                .getSavedStateHandle()
                .getLiveData("key");

FragmentB得到FragmentA的结果


 liveData.observe(getViewLifecycleOwner(), s -> {

           tvResult.setText(s);

        });

FragmentB中执行以下操作,例如单击按钮时

@Override
    public void onClick(View view) {

        int viewId = view.getId();

        NavController navController = Navigation.findNavController(view);

        if (viewId == R.id.btn_returnResult) {

            String etText = editText.getText().toString();

            Objects.requireNonNull(navController.getPreviousBackStackEntry())
                    .getSavedStateHandle().set("key", etText);

            navController.navigateUp();

        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM