WedX - журнал о программировании и компьютерных науках

Реализация новых компонентов архитектуры Android с активностью и фрагментами

В настоящее время я пытаюсь реализовать приложение с компонентами архитектуры, предоставляемыми Android. С точки зрения использования только действий в пакете пользовательского интерфейса с этим проблем нет, но если я реализую несколько фрагментов, которые хранятся в одном действии в контейнере фрагментов, у меня будут проблемы. Связь для запросов данных с использованием фрагментов никогда не должна вызываться из самих фрагментов, а из их активности. В этом случае только действие зарегистрирует необходимую модель представления, но жизненный цикл каждого фрагмента не обрабатывается должным образом... как я могу решить эту проблему, используя несколько фрагментов в одном действии, запрашивающем данные с сервера, и учитывать жизненный цикл для фрагменты, даже когда действие вызывает модель представления?


Ответы:


1

Я не уверен, правильно ли я вас понял. Вы хотите загрузить данные в свою активность для своего фрагмента с учетом жизненного цикла вашего фрагмента?

Возможно, вы можете попытаться получить доступ к ViewModel вашего фрагмента из Activity, чтобы получить ViewModel с поддержкой FragmentLifecycle. И чем вы можете запрашивать данные через эту ViewModel.

viewModel = ViewModelProviders.of(YourFragment).get(FragmentViewModel.class);

Я не уверен, работает ли это или это хорошая идея. Руководство Google показывает это только наоборот, получая доступ к ViewModel из действия внутри фрагмента, чтобы обмениваться данными между фрагментами или действием и фрагментом.

11.08.2017
  • С точки зрения запроса данных, например, через веб-службу, неправильно позволять фрагменту обрабатывать их. Вместо этого вы должны использовать обратный вызов для своей активности, и активность выполняет этот запрос, а затем возвращает данные запросов во фрагмент... 13.08.2017
  • Используя компоненты Android Arch, такие обратные вызовы для удерживающей активности больше не нужны. Руководство Google сообщает, что вы можете использовать веб-сервис, напрямую вызывая модель просмотра фрагментов, как вы упомянули. Он обрабатывает жизненный цикл фрагментов, и если действие будет уничтожено, фрагмент также будет уничтожен, и это обрабатывается наблюдателем, реализованным во фрагменте. В моем решении я по-прежнему использую эти обратные вызовы для удерживающей активности, и если данные из всех фрагментов собираются в действии, я вызываю действия viemodel для запроса данных и возврата их следующему действию. Спасибо за ваше решение! 13.08.2017
  • Я рад, что смог помочь вам! Я волновался, потому что не уверен, как это поведет себя, когда Фрагмент будет уничтожен или еще не полностью инициализирован. Потому что вы, вероятно, получите нулевой объект. 14.08.2017

  • 2

    Слышали ли вы об Interface Listener. Это поможет вам во всех отношениях, независимо от того, сколько осложнений есть. Если вы все еще в замешательстве, дайте мне знать

    31.07.2017
  • спасибо за ответ! Но дело не в том, как передавать данные из фрагментов в активность - вопрос заключался в том, как я могу обрабатывать жизненный цикл каждого фрагмента, когда я только регистрирую компонент модели представления в активности? наблюдатель не может быть отменен при переключении фрагмента, потому что активность все еще активна 31.07.2017
  • вам просто нужно передать listenerObject фрагмента при запросе запроса и вернуть ответ зарегистрированному listenerObject 31.07.2017

  • 3

    @Рахул Хурана

    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.

    31.07.2017
    Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]