Правильный подход к веб-службе вызовов (API) из класса фрагментов

125
6

Мне нужно знать, в каком методе обратного вызова фрагмента мы должны вызвать веб-службу, после которой после возврата к фрагменту веб-служба не должна звонить снова.


Например.
У меня есть класс фрагментов MyFragment.java


public class MyFragment extends Fragment {

@Override
public void onAttach(Activity activity) {
super.onAttach(activity);

}

@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_layout, container,
false);

return rootView;
}

}


Мне нужно знать, какой метод обратного вызова мне нужно вызвать webservice для обновления пользовательского интерфейса фрагмента. Сейчас я вызываю веб-службы из метода onCreateView. но мне нужно знать, какой должен быть лучший способ вызвать веб-сервис из фрагмента.

спросил(а) 2014-04-28T08:27:00+04:00 6 лет, 5 месяцев назад
1
Решение
90

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


onCreate() - Система вызывает это при создании фрагмента. В рамках вашей реализации вы должны инициализировать основные компоненты фрагмента, которые вы хотите сохранить, когда фрагмент приостановлен или остановлен, а затем возобновлен.

onCreateView()Система вызывает это, когда время для фрагмента впервые выводит свой пользовательский интерфейс. Чтобы нарисовать пользовательский интерфейс для вашего фрагмента, вы должны вернуть представление из этого метода, который является корнем макета фрагмента. Вы можете вернуть значение null, если фрагмент не предоставляет пользовательский интерфейс.


Когда вы создаете фрагмент в другом месте приложения, вызывается метод onCreate(). Когда фрагмент должен быть нарисован в первый раз, вызывается onCreateView(), и этот метод возвращает созданный View. В вашем случае вы могли бы пойти с чем-то вроде:


    Объявить переменную экземпляра (контейнер) для этих данных и адаптера (если вы используете их).
    В onCreate инициализируйте все эти данные (пустой контейнер), инициализируйте адаптер и затем выполните AsyncTask.
    В onCreateView подготовьте представление для возврата - адаптер и т.д. Итак, как только AsyncTask закончит, в onPostExecute он вызывает your_adapter.notifyDataSetChanged(). Это приведет к переделке фрагмента, поскольку адаптер будет проинформирован о том, что данные были изменены (выбраны с сервера).

ответил(а) 2014-04-28T09:22:00+04:00 6 лет, 5 месяцев назад
40

Зависит от того, когда вы хотите получить данные.
Вы хотите его каждый раз, когда приложение выходит на передний план?
Использовать onResume()
Вы хотите его только тогда, когда приложение запускается в первый раз?
Используйте onViewCreated(), который вызывается после завершения onCreateView.

ответил(а) 2016-11-22T09:26:00+03:00 3 года, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема