Андроид

Я разрабатываю приложение с ViewPager для боковых прокручивающих таблиц, иногда мне нужно изменить адаптер для загрузки другого набора таблиц. Я попытался сделать следующее:

mViewPager.setAdapter(new pagerAdapterPushed(getSupportFragmentManager())); mViewPager.getAdapter().notifyDataSetChanged(); indicator.setViewPager(mViewPager); indicator.invalidate(); mViewPager.invalidate(); 

Но он всегда перезагружает предыдущие данные. Невозможно ли изменить адаптер ViewPager?

Solutions Collecting From Web of "Андроид"

Точно как мой APP делает …

Для изменения ViewPagerAdapter я сделал следующее:

  1. Очистить все фрагменты внутри текущего адаптера
  2. Установите текущий адаптер на нуль
  3. Назначить новый 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); 

Надеюсь, что это поможет ~

Вы должны переопределить public int getItemPosition (Object object) в public int getItemPosition (Object object) пейджера. Для каждого элемента в viewpager вам нужно вернуть POSITION_UNCHANGED (если он все еще находится в пейджере) или POSITION_NONE (если он был удален). В противном случае просмотр пейджера не будет знать, что что-то изменилось. Я бы не рекомендовал устанавливать новый адаптер, просто очистив данные в старой.

Добавьте это, чтобы просмотреть пейджер для перезагрузки следующего фрагмента:

 viewPager.setCurrentItem()