2012-02-11 4 views
7

У меня есть активность, которая использует вкладки, а вкладки переключают фрагменты. Проблема в том, что Фрагмент занимает несколько секунд, чтобы загрузить его при создании, таким образом, переключение вкладок имеет задержку около 1 или 2 секунд. Чтобы исправить это, я пытался найти способ отображения простого графического изображения загрузки или даже прогресса, так что вкладка мгновенно изменится и отобразит что-то, указывающее, что вещи загружаются, пока все не завершится.Изменение вкладок медленно/неаккуратно - с использованием фрагментов

Мой onCreateView метод фрагмента выглядит следующим образом:

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

    doHeavyStuff(); 

    return fl; 
} 

Я попытался положить doHeavyStuff() в onStart() но ничего не помогло. И нить не поможет, потому что doHeavyStuff() включает в себя манипулирование представлениями/графическим интерфейсом.

Любые идеи о том, как я могу отобразить фрагмент и отобразить «Загрузка» информации , а все остальное загружается?

Спасибо!

Мэтт.

ответ

8

В onActivityCreated():

  • Начать progress bar (или любой прогресс, показывающий элемент пользовательского интерфейса/с).
  • Выполните HeavyStuffDoingAsyncTask, что объясняется ниже.

HeavyStuffDoingAsyncTask должны иметь:

  • doHeayStuff() логика «s, который не обновляет интерфейс в методе doInBackground.
  • звоните publishProgress() от doInBackground() каждый раз, когда вы хотите обновить ui.
  • Внедрение логики обновления пользовательского интерфейса в методе onProgressUpdate.
  • Остановить индикатор выполнения в методе onPostExecute.

Удачи.

+0

Я только накачивания вид в onCreateView(), и это также лага. Так что я должен изменить этот раздувающий код, как указано выше, для лучшей производительности? – Husyn

+0

Вы делаете что-то другое, кроме как раздувая представление? как заполнение представлений и т. д.,? Если это так, вы должны сделать заполняющую часть за пределами onCreateView(), чтобы избежать лаггинга. – 500865

+0

Нет, я только раздуваю представление. return inflater.inflate (R.layout.setting_list_layout, контейнер, false); - единственная строка в onCreateView(); – Husyn

0

попытаться установить

pager.setOffscreenPageLimit(no_of_fragments or pages); 
Смежные вопросы