Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Kemaweyan
2 / 2 / 1
Регистрация: 16.12.2014
Сообщений: 5
#1

ViewPager.setCurrentItem() внутри LoaderCallbacks.onLoadFinished() - Программирование Android

22.01.2015, 22:59. Просмотров 557. Ответов 1
Метки нет (Все метки)

Столкнулся с проблемой. В приложении главная активность - список ListView, при выборе элемента списка открывается новая активность с ViewPager, где должен отображаться выбраный элемент списка («подробная информация») с возможностью пролистывания. Данные берутся из БД через LoaderManager. Проблема состояит в том, что в этом случае отваливается панель действий фрагмента, которая появляется только после пролистывания.

Приведу пример. Есть список из, допустим, 10 элементов. Если нажать на элемент №5, то откроется вторая активность с этим самым 5 элементом, но панели дейсвий не будет видно. Если пролистнуть на №4 или №6 - панель появляется. Если потом вернуться на №5 - панель есть. onCreateOptionsMenu фрагмента во всех случаях вызывается.

Проблема эта проявляется только в том случае, если используется LoaderManager, а точнее если переключение на выбраный элемент ViewPager.setCurrentItem() вызывать внутри LoaderCallbacks.onLoadFinished(). Если этот вызов убрать, то при выборе любого элемента списка будет открываться первый (первая страница ViewPager) и с панелью действий всё будет нормально. Аналогично нет проблем, если отказаться от LoaderManager и весь код выполнять в onCreate активности (загрузка курсора, создание адаптера, переключение на выбраную страницу). Но это же не совсем корректно - грузить данные из БД в главном потоке.

В документации к LoaderCallbacks про onLoadFinished() вычитал вот что:

Note that normally an application is not allowed to commit fragment transactions while in this call, since it can happen after an activity's state is saved.
Т.е. получается, что вызов ViewPager.setCurrentItem() в данном месте не совсем правильный? Это могло бы объяснить странный баг с панелью, но как тогда иначе переключить страницу?

Добавлено через 4 часа 6 минут
Проблему, похоже, решил. Помогло это руководство. Конкретно нужно было, видимо, вынести ViewPager.setAdapter() из onLoadFinished() в onCreate(). Для этого пришлось переписать класс адапртера, чтоб можно было присваивать курсору null, а потом менять курсор при необходимости. Теперь панель не пропадает.
1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2015, 22:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ViewPager.setCurrentItem() внутри LoaderCallbacks.onLoadFinished() (Программирование Android):

Подвисает ViewPager с фрагментами внутри - Программирование Android
Собственно вот в чём соль. Есть ViewPager с фрагментами внутри, в каждом фрагменте есть изображение которое подгружается из ресурсов...

ViewPager внутри ListView, Как вставить? - Программирование Android
Здравствуйте. Есть задача, внутри ListView сделать айтемы, которые содержат ViewPager Вот фрагмент кода, в котором я пытаюсь просто...

Как отобразить ViewPager внутри другой активити - Программирование Android
Подскажите пожалуйста. Изучил данный урок. И хочу сделать такую прокрутку страниц внутри класса, который наследуются от активити, а не от...

Повторное создание фрагмента внутри фрагмента ViewPager - Программирование Android
Доброго времени суток! Использую внутри фрагмента элемент ViewPager, который сам внутри содержит еще два фрагмента-вкладки. При первом...

Не запускается метод onLoadFinished - Программирование Android
Есть класс 1: import android.app.Activity; import android.content.ContentValues; import android.content.Context; import...

ViewPager - Программирование Android
Всем. Да я недалекий и тупой, уже дня три не могу никак понять :wall: Есть ViewPager <android.support.v4.view.ViewPager ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
23.01.2015, 10:01 #2
Kemaweyan, за ссылку спасибо. Поизучаю на досуге, как они делают андроидные программы.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2015, 10:01
Привет! Вот еще темы с ответами:

ViewPager - Программирование Android
Помогите пожалуйста. Использую эту фичу в своей программе(пример один и его очень много в поисковике). И столкнулся с проблемой. На...

ViewPager - Программирование Android
Здравствуйте! В приложении использовал пример с Хабра http://habrahabr.ru/post/131889/, однако, не могу понять как при прокрутке экранов...

Правильный ViewPager - Программирование Android
Вообщем все что я сделал прикрепил на картинке. Беда то вот в чем. Ну например я тыкаю пальцем ну и скролирую, а тыкаю то я в кнопку...

ViewPager и ListView - Программирование Android
Вообще пытаюсь сделать пролистывающиеся редактируемые списки. Для этого использую ViewPager и ListView. Так как ViewPager использует...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru