2011-10-26 3 views
5

Я использую ViewPager с пользовательским PagerFragmentAdapter, который использует внутренний список для предоставления фрагментов. Я хотел бы добавить и удалить фрагменты динамически при изменении настроек.Динамическое добавление и удаление фрагментов в ViewPager

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.fragment_pager); 
    mAdapter = new ServicePagerAdapter(getSupportFragmentManager()); 
    mPager = (ViewPager) findViewById(R.id.pager); 
    mPager.setAdapter(mAdapter); 
} 

Я попытался позвонить снова setAdapter, но я получить IllegalStateException (Can not perform this action after onSaveInstanceState).

Как достичь моей цели?

ответ

2

Вы не должны сбрасывать ServicePagerAdapter каждый раз. Достаточно создать и установить его один раз в onCreate() методе вашего Activity (или в onActivityCreated() методе вашего Fragment), а затем вы можете просто вызвать метод вашего адаптера add(), чтобы добавить к нему новые элементы. Но не забудьте позвонить notifyDataSetChanged() после каждого добавления в адаптер.

+0

К сожалению, это не так просто. FragmentPagerAdapter кэширует фрагменты, вам нужно создать пользовательский PagerAdapter или использовать некоторые трюки. – Matroska

+0

в вашем примере кода вы упоминаете 'ServicePagerAdapter' - это не класс библиотеки, поэтому я предположил, что вы уже используете пользовательский адаптер. Так что да, вам нужна индивидуальная реализация класса PagerAdapter. Что касается вашего основного вопроса - я думаю, на это был дан ответ. – HitOdessit

+2

Недостаточно вызвать notifyDataSetChanged() в PagerAdapter, если элементы были удалены. Вам также необходимо переопределить метод getItemPosition для PagerAdapter. Верните POSITION_UNCHANGED, если элемент все еще существует, или POSITION_NONE, если он был удален. –

Смежные вопросы