last day (14 days later) » 

08:17
0
A: Вопрос про ViewPager

evpможет не стоит адаптер использовать? Вы же обновлять собираетесь фрагменты… viewpager при этом не обязательно перезаполнять… можно, например, получить все свои фрагменты и обновить их (вызвать onCreateView, ну или другой метод, где происходит инициация данных Ваших фрагментов)

у меня при обновлении может измениться количество фрагментов
evp
evp
а это не важно… у Вас же есть коллекция фрагментов… можно получить их всех и обновить в цикле… или у Вас они в принципе уничтожаются и другие фрагменты образуются?
фрагменты такие же, только например если раньше у меня было 2 фрагмента, то при обновлении их может стать 3 и наоборот. Т.е. у меня при обновлении добавляется количество фрагментов или удаляется.
evp
evp
у Вас есть адаптер - тот, который параметр тут "setAdapter(adapter);" у этого адаптера есть метод getCount() - это получите количество фрагментов. в цикле перебирайте их опять же методом адаптера getItem() - так Вы получите Ваш фрагмент, и у него соответственно вызывайте onCreateView
а если мне нужно изменить количество фрагментов?
evp
evp
08:17
так Вам надо перерисовать viewPager или просто обновить данные в тех фрагментах, что уже отрисованы?
после метода setAdapter я обычно принудительно выставляю текущую страницу setCurrentItem(0) может так заставит явно титулы выстроиться правильно
полностью перерисовать, т.е. у меня может измениться количество страниц в ViewPager.
evp
evp
попробуйте после setAdapter вызвать setCurrentItem(0), это в свою очередь должно вызвать @Override public CharSequence getPageTitle(int position) { ……… } адаптера и соответственно, перерисовать титулы
я так и делаю: mSectionsPagerAdapter = new SectionsPagerAdapter(getChildFragmentManager()); mViewPager.setAdapter(mSectionsPagerAdapter); mViewPager.setCurrentItem(mSectionsPagerAdapter.getCount() - 1); кстати, если поставить setCurrentItem(0), то перерисовывается хорошо, пустые титулы только когда я хочу поставить последнюю страницу как текущую.
а у вас у всех страниц/фрагментов имена есть...в смысле getPageTitle для всех возвращает что нибудь?
Да, для всех возвращает.
evp
evp
08:17
такое ощущение, что адаптер не создал предыдущую страницу…попробуйте setCurrentItem() последовательно на предпоследнюю страницу, а потом на последнюю…
вы какой адаптер используете? FragmentStatePagerAdapter или FragmentPagerAdapter?
@evp FragmentState
@evp пробовал на предпоследнюю/последнюю - один и тот же эффект. Title даже не создается, только содержимое фрагмента создается.
evp
evp
он при свайпе удаляет фрагменты +- 2 от текущего, насколько я помню. Если фрагментов не много может стоит пользовать FragmentPagerAdapter…
@evp с FragmentPagerAdapter эффект тот же, title для последней страницы создается только в момент свайпа
evp
evp
public static class какой-то майАдаптер extends FragmentPagerAdapter можно глянуть на этот класс?
Сделал так: new Handler().post(new Runnable() { @Override public void run() { mViewPager.setCurrentItem(mSectionsPagerAdapter.getCount() - 1); } }); теперь все отображается нормально, но получился некрасивый эффект: в начале показывается 1 страница, а потом перескакивает на последнюю.
pastebin.com/mm98c1D3 вот тот класс
evp
evp
08:17
тогда как вариант, можно добавлять не в конец, а в начало и пользовать уже setCurrentItem(0)
титулы вроде бы как устанавливаются но не совсем понятно, почему таблицы создаются асинхронно… тут может получиться и ответ, потому как гетКаунт может сработать до того, как таблицы создадутся и count = tableNames.size(); - даст ноль
Я загружаю данные таблицы из базы данных, поэтому запустил их в отдельном потоке
evp
evp
тогда стоит весь адаптер создавать в отдельном потоке, а не отдельную его часть. Создавайте класс SectionsPagerAdapter в отдельном потоке, но внутри него, в конструкторе уберите разделение потоков, чтобы гетКаунт не сработал до того как завершится конструктор
ничего не изменилось. запустил в новом потоке handler mSectionsPagerAdapter = new SectionsPagerAdapter(getChildFragmentManager()); mViewPager.setAdapter(mSectionsPagerAdapter); mViewPager.setCurrentItem(mSectionsPagerAdapter.getCount() - 1);
в самом классе адаптера убрал получение данных в другом потоке

last day (14 days later) »