0

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)

Saxxhw
  • 7
  • 1
  • 4
  • Duplicate: https://stackoverflow.com/questions/56243119/pass-data-back-to-previous-fragment-using-android-navigation – Fintasys Jul 01 '19 at 10:05

1 Answers1

0

You can use getParentFragment() in Fragment2 to transfer data to Fragment1. This only works if you create Fragment2 via getChildFragmentManager() of Fragment1.

If you use getSupportFragmentManager() of Activity then you have to create a listener.

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);
    }
}
Israel dela Cruz
  • 794
  • 1
  • 5
  • 11
  • I want an official solution, not an interface. Thank you all the same. Now I used EventBus to solve this problem. – Saxxhw Jul 02 '19 at 01:22
  • I don't know how official you want it to be but the interface solution literally comes from Android Studio itself. But yeah EventBus should work. – Israel dela Cruz Jul 02 '19 at 02:26