簡體   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