Это старый вопрос, но в любом случае здесь есть некоторая информация в надежде, что она кому-нибудь поможет.
ViewPager работает вместе со своим адаптером, который устанавливается на него через ViewPager # setAdapter ().
В случае этого вопроса, кажется, FragmentPagerAdapter используется в качестве адаптера (так как этот адаптер называет фрагменты android: switcher: [x]: [y] как появляется в исключении).
Одно важное замечание о FragmentPagerAdapter заключается в следующем:
FragmentPagerAdapter владеет выделенными фрагментами, которые используются в ViewPager.
Пользователь ViewPager с соединением ViewPagerAdapter должен определить подкласс FragmentPagerAdapter, реализующий метод getItem (), прототип которого выглядит следующим образом:
public abstract Fragment getItem(int position);
Эта функция создает различные фрагменты, используемые ViewPager в качестве страниц.
Реализация этого метода должна рассматриваться как услуга, предоставляемая подклассом FragmentPagerAdapter () для выделения фрагментов.
Другими словами, хотя подкласс распределяет фрагменты, он не является их владельцем.
Поскольку, как сказано выше, владельцем фрагментов является FragmentPagerAdapter, все операции с фрагментами (в смысле FragmentManager / FragmentTransaction) должны выполняться только FragmentPagerAdapter.
Попытка выполнения операций с этими фрагментами может помешать нормальной работе ViewPager и вызвать неопределенное поведение.
В случае этого вопроса есть попытка удалить один из фрагментов, используемых ViewPager за пределами FragmentPagerAdapter, который, как объяснено, является некорректным и, вероятно, вызвал последовательность, которая закончилась этим исключением.
Когда необходимо динамически удалять / добавлять / заменять страницы в ViewPager, способ сделать это для вызова notifyDataSetChanged () на адаптере.
Удачи!