SolidlSnake
@SolidlSnake
Ваш дружелюбный сосед

Fragment и AsyncTast?

Доброго времени суток.
Сейчас изучаю разработку под Android и возникла пара вопросов.
Обычно все примеры в интернете рассматриваются при работе с активностью, а не фрагментами, хотя сейчас, вроде как, советуют и вообще правильно работать именно с фрагментами.

1) При работе с активностью мы можем получить View еще в методе onCreate. Если же мы работаем с фрагментом, то их мы достаем в методе onCreateView. Запускать AsyncTask вроде как положено в onCreate, но запуская его при работе с фрагментом - не факт, что к вызову onPostExecute мы будем иметь наши view, т.е. не сможем с ними работать из метода. Сейчас активирую AsyncTask после получения всех view в onCreateView, но мне кажется, что это не правильно, может кто что посоветует?

2) Вообще сама работа с view в методе onPostExecute нашего AsyncTask'а мне кажется не очень хорошей идеей. Код таким образом выглядит как-то не особо красиво. Может тоже кто что знает по теме?

P.S. Честно пытался найти что-то в интернетах, но везде либо не по теме, либо при работа с Activity.
  • Вопрос задан
  • 2815 просмотров
Решения вопроса 1
@FoxInSox
1. Делайте так, как вам удобно. Главное помнить про жизненный цикл фрагмента, т.е. на момент вызова метода onPostExecute фрагмента может и не быть.

2. Котлеты и мух надо отделять. В идеале ни в активити, ни в фрагемтах не должно быть создания AsyncTask'ов или просто потоков из-за "нестабильного" жизненного цифла фрагметов/активити. Как вариант использовать событийную модель:
Есть фрагмент Х, есть объект Y который выполняет сетевые запросы
a) фрагмент Х отсылает событие "Хочу выполнить запрос туда-то" =>
б) Y этот запрос делает и сохраняет результат(где-либо) =>
в) Y отсылает событие "Запрос сделан" =>
г) если фрагмент X жив, то он ловит событие и отображает загруженные данные.

Подробнее можно почитать тут: www.mdswanson.com/blog/2014/04/07/durable-android-...

ps активность повышается у носорогов в период размножения, а в Android есть активити/actvity. Вы же пишете AsyncTask, а не АсинхЗадача.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@StanKo
По сути задача, как я подозреваю, что-то типа надо вывести некий список, но его источник - в интернетах. Поэтому к моменту отработки АТ надо иметь на экране готовый ListView. Для этого надо таки делать что-то типа событийной модели или же модель с интерфейсом и CallBack Method-ом, в последнем случае придется сохранить результат в поле класса, например, и дальше, если GUI построен (onCreateView отработал), то подключить к листу и вывести, если нет, то тогда в конце метода построения GUI проверять а не пусто ли в поле-источнике данных, если есть данные - сразу и подключить. Вообще, кажись, АТ подключается не к фрагменту, а к его активити.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы