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

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

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

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

22.01.2015, 22:59. Просмотров 532. Ответов 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, а потом менять курсор при необходимости. Теперь панель не пропадает.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2015, 22:59     ViewPager.setCurrentItem() внутри LoaderCallbacks.onLoadFinished()
Посмотрите здесь:

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

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

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

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

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

AsyncTask в Fragment и viewPager - Программирование Android
У меня есть ViewPager который состоит из двух листающихся экранов, есть код фрагмента который запускается в этом viewPager (как правильно...

Обновление содержимого ViewPager - Программирование Android
Есть ли какие-нибудь способы обновить содержимое всех страницы ViewPager'а? Придумал только походить пару раз туда обратно по всем...

ViewPager обновление фрагментов - Программирование Android
Использую viewpager имеет три фрагмента. Как обновлять данные для второго фрагмента с первого фрагмента. И наоборот. Метод ...

Сохранение состояния ViewPager - Программирование Android
Есть адаптер: public class QuestionFragmentPagerAdapter extends FragmentPagerAdapter { @Override public Fragment getItem(int...

Изменение Activity из ViewPager - Программирование Android
Добрый день! Есть viewPager, который принимает на вход 3 фрагментов и работает с ними. Активики, в которой расположен viewPager,...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
23.01.2015, 10:01     ViewPager.setCurrentItem() внутри LoaderCallbacks.onLoadFinished() #2
Kemaweyan, за ссылку спасибо. Поизучаю на досуге, как они делают андроидные программы.
Ответ Создать тему
Опции темы

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