Я использую 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)
.
Как достичь моей цели?
К сожалению, это не так просто. FragmentPagerAdapter кэширует фрагменты, вам нужно создать пользовательский PagerAdapter или использовать некоторые трюки. – Matroska
в вашем примере кода вы упоминаете 'ServicePagerAdapter' - это не класс библиотеки, поэтому я предположил, что вы уже используете пользовательский адаптер. Так что да, вам нужна индивидуальная реализация класса PagerAdapter. Что касается вашего основного вопроса - я думаю, на это был дан ответ. – HitOdessit
Недостаточно вызвать notifyDataSetChanged() в PagerAdapter, если элементы были удалены. Вам также необходимо переопределить метод getItemPosition для PagerAdapter. Верните POSITION_UNCHANGED, если элемент все еще существует, или POSITION_NONE, если он был удален. –