首页 > 解决方案 > I used navigation in my app,How can I launch a Fragment for which I get a result when it finished?

问题描述

I have two Fragments Fragment1 and Fragment2,In Fragment1 I use findNavController().navigate() launch the Fragment2,When Fragment2 finished,How to pass the data to Fragment1?(Translate by Google)

标签: androidnavigation

解决方案


您可以getParentFragment()在 Fragment2 中使用将数据传输到 Fragment1。这仅在您通过getChildFragmentManager()Fragment1 创建 Fragment2 时才有效。

如果你使用getSupportFragmentManager()Activity那么你必须创建一个监听器。

class Fragment2 {
    private UpdateFragment1Listener updateFragment1Listener;

    void sendDataToFragment1() {
        updateFragment1Listener.updateFragment(myData);
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof UpdateFragment1Listener ) {
            updateFragment1Listener = (UpdateFragment1Listener ) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement UpdateFragment1Listener ");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        updateFragment1Listener = null;
    }

    interface UpdateFragment1Listener {
        void updateFragment1(MyData myData);
    }
}

class MyActivity implements Fragment2.UpdateFragment1Listener {
    private Fragment1 fragment1;

    @Override
    void updateFragment1(MyData myData) {
        fragment1.update(myData);
    }
}

推荐阅读