Андроид - программирование
Подтвердить что ты не робот

Андроид

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

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

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

4b9b3361

Ответ 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()