Андроид
Я разрабатываю приложение с помощью ViewPager для боковых прокручивающих таблиц, иногда мне нужно изменить адаптер для загрузки другого набора таблиц.
Я попытался сделать следующее:
mViewPager.setAdapter(new pagerAdapterPushed(getSupportFragmentManager()));
mViewPager.getAdapter().notifyDataSetChanged();
indicator.setViewPager(mViewPager);
indicator.invalidate();
mViewPager.invalidate();
но он всегда перезагружает предыдущие данные. Невозможно ли изменить адаптер ViewPager?
Ответы
Ответ 1
Точно как мой APP делает...
Для изменения ViewPagerAdapter я сделал следующее:
- Очистить все фрагменты внутри текущего адаптера
- Установите текущий адаптер на нуль
-
Назначить новый adpater для ViewPager
/* Clear all Fragments inside current adapter */
public class MyPagerAdapter extends FragmentPagerAdapter
{
private ArrayList<Fragment> fragments=new ArrayList<Fragment>();
//...some stuff
public void clearAll() //Clear all page
{
for(int i=0; i<fragments.size(); i++)
fragMan.beginTransaction().remove(fragments.get(i)).commit();
fragments.clear();
}
}
/* Set current adapter to null */
Constants.VP.removeAllViews();
Constants.VP.setAdapter(null);
/* Assign new adpater for ViewPager */
Constants.PAGER=new MyewPagerAdapter(getSupportFragmentManager());
Constants.VP.setAdapter(Constants.PAGER);
Надеюсь, что это поможет ~
Ответ 2
Вам нужно переопределить public int getItemPosition (Object object)
в пейджер-адаптере. Для каждого элемента в viewpager вам нужно вернуть POSITION_UNCHANGED
(если он все еще находится в пейджере) или POSITION_NONE
(если он был удален). В противном случае просмотр пейджера не будет знать, что что-то изменилось. Я бы не рекомендовал устанавливать новый адаптер, просто очистив данные в старой версии.
Ответ 3
Я нашел очень простой вариант, я не знаю, правильно это или нет, но вы можете просто переустановить адаптер
mViewPager.setAdapter(mSectionsPagerAdapter);
Это пример для проекта проекта Google. Работа с вкладками для кнопки FloatingActionButton
Ответ 4
Добавьте это, чтобы просмотреть пейджер для перезагрузки следующего фрагмента:
viewPager.setCurrentItem()