да. Я хотел бы знать, есть ли способ, чтобы один фрагмент вызывал другой напрямую, используя новые компоненты. Но я думаю, что их цель - решить эту проблему.

st Google IO Google выпустил предварительный просмотр некоторых новых компонентов Arch, один из которых, ViewModel.

вдокументы Google показывает одно из возможных применений этого компонента:

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

Эта общая болевая точка может быть решена с помощью объектов ViewModel. Представьте себе общий случай фрагментов основной детали, когда у нас есть фрагмент, в котором пользователь выбирает элемент из списка, а другой фрагмент, который отображает содержимое выбранного элемента.

Эти фрагменты могут совместно использовать ViewModel, используя свою область действия для обработки этого взаимодействия.

И показывает пример реализации:

public class SharedViewModel extends ViewModel {
    private final MutableLiveData<Item> selected = new MutableLiveData<Item>();

    public void select(Item item) {
        selected.setValue(item);
    }

    public LiveData<Item> getSelected() {
        return selected;
    }
}

public class MasterFragment extends Fragment {
    private SharedViewModel model;
    public void onActivityCreated() {
        model = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
        itemSelector.setOnClickListener(item -> {
            model.select(item);
        });
    }
}

public class DetailFragment extends LifecycleFragment {
    public void onActivityCreated() {
        SharedViewModel model = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
        model.getSelected().observe(this, { item ->
           // update UI
        });
    }
}

Я был весьма взволнован возможностью того, что эти интерфейсы не нужны для фрагментов, чтобы общаться через действие.

Но пример Google не показывает, как именно я бы назвал фрагмент детали от мастера.

Я все еще должен использоватьинтерфейс это будет реализовано действием, которое будет вызывать фрагментManager.replace (...), или есть другой способ сделать это, используя новую архитектуру?

Ответы на вопрос(6)

Ваш ответ на вопрос