Как передать данные между двумя фрагментами?

В Android есть несколько способов передачи данных между фрагментами. Один из самых простых и распространенных способов - использование интерфейса обратного вызова (callback interface).

1. Создайте интерфейс для обратного вызова в фрагменте-источнике данных:

public interface DataPassListener {
    void onDataPass(String data);
}

2. В фрагменте-источнике данных объекта интерфейса обратного вызова и вызовите его метод передачи данных:

public class SourceFragment extends Fragment {
    private DataPassListener dataPassListener;

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

    private void sendDataToDestinationFragment(String data) {
        dataPassListener.onDataPass(data);
    }

    ...
}

3. Реализуйте интерфейс обратного вызова в активности-хосте фрагментов:

public class MainActivity extends AppCompatActivity
        implements DataPassListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ...
    }

    @Override
    public void onDataPass(String data) {
        DestinationFragment destinationFragment = 
                (DestinationFragment) getSupportFragmentManager().findFragmentById(R.id.destination_fragment_id);
        destinationFragment.updateData(data);
    }
}

4. Получите данные в фрагменте-получателе данных:

public class DestinationFragment extends Fragment {
    private TextView dataTextView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_destination, container, false);
        dataTextView = rootView.findViewById(R.id.data_text_view);
        return rootView;
    }

    public void updateData(String data) {
        dataTextView.setText(data);
    }
}

Теперь, когда данные готовы в фрагменте-источнике данных, они могут быть переданы через интерфейс обратного вызова в активность-хост и затем отображены в фрагменте-получателе данных. Этот подход позволяет эффективно обмениваться данными между фрагментами без прямого взаимодействия между ними.