2015-10-03 4 views
0

У меня есть основное действие, в котором я использовал пейджер представления. Так что я могу перемещаться между 4 вкладками, а пейджер представления обрабатывает все это. Одна из моих вкладок просматривает контакты на телефоне получить их данные и отобразить их в recylerview, который находится на одной вкладке, эта задача занимает много времени, и я делаю это в async-задаче. Все работает нормально, но проблема в том, что если я перейду на другую вкладку, пока это сканирование использование данных не может быть применено к просмотру ресайклера, потому что этот фрагмент уничтожается. Есть ли обходной путь для этого или я должен просто запретить пользователю перемещать вкладки во время сканирования (если бы это был какой-то код или ссылка на код, это было бы очень полезно).Сохранение данных async в режиме recycler

ответ

1

Я бы не рекомендовал вам заставлять пользователя оставаться на странице во время загрузки данных. Похоже, это только срывало бы людей. С этой целью у меня есть пара идей, которые должны поддерживать ваш AsyncTask, пока ваш Fragment не будет виден.

Во-первых, вы можете позвонить setOffScreenPageLimit(2) на свой ViewPager. Поскольку у вас есть только четыре Fragment, это должно означать, что все они хранятся в памяти.

viewPager.setOffScreenPageLimit(2); 

Другой подход может быть в состоянии создать UI-менее Fragment, единственной функцией которого является проведение вашего AsyncTask, а затем, как только он достигает onPostExecute(), передать Cursor результат в Fragment, что требует его либо interface или EventBus какого-то типа (то есть LocalBroadcastManager или одна из других прекрасных библиотек, которые существуют, например, EventBus от GreenRobot).

Редактировать Если вы хотите информацию о том, как создать такой «рабочий» Fragment, то есть очень хороший и подробный пост на androiddesignpatterns.

+0

Планировал настройку offscreenlimit, но я не был уверен, сколько из памяти ударит, что может быть. Это потребляет много памяти? –

+0

@JudeFernandes В записи javadoc говорится, чтобы попытаться сохранить номер как можно ниже, но поскольку минимальная сумма 'Fragment', кэшированная 'ViewPager', равна трем, в действительности четыре не должны вызывать проблемы. – PPartisan

Смежные вопросы