В 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); } }
Теперь, когда данные готовы в фрагменте-источнике данных, они могут быть переданы через интерфейс обратного вызова в активность-хост и затем отображены в фрагменте-получателе данных. Этот подход позволяет эффективно обмениваться данными между фрагментами без прямого взаимодействия между ними.