Передача `ArrayList` из одного фрагмента в другой может быть выполнена несколькими способами:
1. **Через аргументы фрагмента (`Bundle`):**
Вы можете передать список как сериализованный объект (если список реализует `Serializable`) или как `Parcelable` (если элементы списка реализуют интерфейс `Parcelable`).
```java
// Создаём новый фрагмент
Fragment newFragment = new SomeFragment();
// Подготавливаем список для передачи
ArrayList<SomeParcelableObject> arrayList = new ArrayList<>();
// Создаём объект Bundle для хранения аргументов
Bundle args = new Bundle();
// Добавляем список в Bundle
args.putParcelableArrayList("key", arrayList);
// Устанавливаем аргументы для фрагмента
newFragment.setArguments(args);
```
Далее, во втором фрагменте вы можете получить список:
```java
Bundle args = getArguments();
if (args != null) {
ArrayList<SomeParcelableObject> arrayList = args.getParcelableArrayList("key");
}
```
2. **Через ViewModel (рекомендуемый способ):**
С использованием архитектурного компонента `ViewModel` вы можете сделать `ArrayList` доступным всем фрагментам. `ViewModel` сохраняет данные между изменениями конфигурации, такими как поворот экрана, и может быть использован для общего доступа к данным между разными фрагментами.
```java
public class SharedViewModel extends ViewModel {
private MutableLiveData<ArrayList<SomeObject>> list = new MutableLiveData<>();
public LiveData<ArrayList<SomeObject>> getList() {
return list;
}
public void setList(ArrayList<SomeObject> newList) {
list.setValue(newList);
}
}
```
Используйте `ViewModelProvider` для получения объекта `SharedViewModel` в каждом фрагменте:
```java
// Во фрагментах
SharedViewModel model = new ViewModelProvider(requireActivity()).get(SharedViewModel.class);
model.getList().observe(getViewLifecycleOwner(), arrayList -> {
// Обработка изменений в списке
});
```
Таким образом, список будет существовать столько, сколько существует `Activity`, и все фрагменты смогут получать доступ и обновлять его через `SharedViewModel`.
3. **Singleton или глобальное хранилище:**
Создание глобального места хранения данных (например, Singleton) также позволяет делиться данными между фрагментами. Однако следует осторожно применять этот подход, так как он может привести к трудностям при управлении жизненным циклом и тестировании приложения.
Выбор способа зависит от конкретного случая и требований к приложению. Использование `ViewModel` для разделения данных и управления ими часто является лучшим подходом, так как он лучше интегрируется с жизненным циклом фрагментов и активностей в Android и способствует созданию более структурированного и тестируемого кода.