Я использую ViewPager в своем приложении и определяю его в основной деятельности. Внутри onCreate
метода я загружаю некоторое количество страниц из SharedPreferences и затем передаю его в PagerAdapter:
@Override
public int getCount() {
return numberOfPages;
}
Проблема заключается в том, что если бы я изменил это число в настройках (или другом действии) на какой-то другой, меньший, чем индекс страницы, который я просматривал ранее, мое приложение зависнет, потому что этот индекс выходит за пределы, когда я возвращаюсь к действию с этим ViewPager. Это можно исправить, просто изменив страницу активного ViewPager. Есть ли способ сделать это?
источник
0
вonPause
метод, и нет сбоев. Спасибо.скользить вправо
viewPager.arrowScroll (View.FOCUS_RIGHT);
скользить влево
viewPager.arrowScroll (View.FOCUS_LEFT);
источник
Не проверяя ваш код, я думаю, что вы описываете, что ваши страницы не синхронизированы, и у вас есть устаревшие данные.
Вы говорите, что изменяете количество страниц, а затем падаете, потому что обращаетесь к старому набору страниц. Это звучит для меня, как будто вы не звоните
pageAdapter.notifyDataSetChanged()
после изменения ваших данных.Когда вы
viewPager
показываете страницу 3 из набора из 10 страниц, и вы переходите на набор только с 5, звонитеnotifyDataSetChanged()
, и вы обнаружите, что вы сейчас просматриваете страницу 3 нового набора. Если вы ранее просматривали страницу 8 старого набора, после ввода нового набора и вызоваnotifyDataSetChanged()
вы увидите, что теперь вы просматриваете последнюю страницу нового набора без сбоев.Если вы просто измените свою текущую страницу, вы можете просто замаскировать проблему.
источник
notifyDataSetChanged()
для переключения на другую страницу попробуйте этот код:
источник
viewPager.setCurrentItem
Дополнительный ответ
Первоначально у меня были проблемы с получением ссылки на
ViewPager
другие методы класса, потому что ониaddOnTabSelectedListener
создали анонимный внутренний класс, который, в свою очередь, требовал объявленияViewPager
переменнойfinal
. Решение состояло в том, чтобы использовать переменную члена класса и не использовать анонимный внутренний класс.источник