В настоящее время я пытаюсь реализовать приложение с компонентами архитектуры, предоставляемыми Android. С точки зрения использования только действий в пакете пользовательского интерфейса с этим проблем нет, но если я реализую несколько фрагментов, которые хранятся в одном действии в контейнере фрагментов, у меня будут проблемы. Связь для запросов данных с использованием фрагментов никогда не должна вызываться из самих фрагментов, а из их активности. В этом случае только действие зарегистрирует необходимую модель представления, но жизненный цикл каждого фрагмента не обрабатывается должным образом... как я могу решить эту проблему, используя несколько фрагментов в одном действии, запрашивающем данные с сервера, и учитывать жизненный цикл для фрагменты, даже когда действие вызывает модель представления?
Реализация новых компонентов архитектуры Android с активностью и фрагментами
Ответы:
Я не уверен, правильно ли я вас понял. Вы хотите загрузить данные в свою активность для своего фрагмента с учетом жизненного цикла вашего фрагмента?
Возможно, вы можете попытаться получить доступ к ViewModel вашего фрагмента из Activity, чтобы получить ViewModel с поддержкой FragmentLifecycle. И чем вы можете запрашивать данные через эту ViewModel.
viewModel = ViewModelProviders.of(YourFragment).get(FragmentViewModel.class);
Я не уверен, работает ли это или это хорошая идея. Руководство Google показывает это только наоборот, получая доступ к ViewModel из действия внутри фрагмента, чтобы обмениваться данными между фрагментами или действием и фрагментом.
Слышали ли вы об Interface Listener. Это поможет вам во всех отношениях, независимо от того, сколько осложнений есть. Если вы все еще в замешательстве, дайте мне знать
@Рахул Хурана
public class UserProfileFragment extends LifecycleFragment {
private static final String UID_KEY = "uid";
private UserProfileViewModel viewModel;
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
String userId = getArguments().getString(UID_KEY);
viewModel = ViewModelProviders.of(this).get(UserProfileViewModel.class);
viewModel.init(userId);
}
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.user_profile, container, false);
}
Как вы можете видеть, фрагмент напрямую взаимодействует с моделью представления, которая является запросом данных или установкой некоторых новых данных. Это действие известно о жизненном цикле, но я знаю, что обязательно связываться с уровнем данных через действие? Это фрагмент кода с официальной страницы Android.