Я разрабатываю простой веб-баузер с динамическими вкладками, чтобы пользователь мог добавлять/удалять их. Для этого я использую FragmentPagerAdapter
, ViewPager
и TabLayout
. Если я создам 2 вкладки (добавьте 2 фрагмента в список), а затем удаляю второй, все будет хорошо работать, и я могу добавить еще один фрагмент в список. Но если добавить 2 и затем удалить пихты один и попытаться добавить новый фрагмент в список, я получаю исключение:Android FragmentPagerAdapter не может изменить тег фрагмента
java.lang.IllegalStateException: Can't change tag of fragment Page{162e3786 #1 id=0x7f0d007d android:switcher:2131558525:1}: was android:switcher:2131558525:1 now android:switcher:2131558525:0
Я думаю, то потому что каждый фрагмент имеет уникальный идентификатор внутри FragmentPagerAdapter
. 2 фрагмента будут иметь id 0 и 1. Если я удалю первый элемент (id равен 0), а затем добавлю новый (id будет 1). Но элемент с id 1 уже существует! Есть ли способ изменить программный код id или установить id при создании фрагментов? Заранее спасибо!
Мои FragmentPagerAdapter
:
public class PagerAdapter extends FragmentPagerAdapter {
private List<Page> fragments;
public PagerAdapter(FragmentManager fm, List<Page> pages) {
super(fm);
this.fragments = pages;
}
@Override
public Fragment getItem(int position) {
return this.fragments.get(position);
}
@Override
public int getCount() {
return this.fragments.size();
}
@Override
public int getItemPosition(Object object) {
int index = pages.indexOf(object);
if (index == -1){
return PagerAdapter.POSITION_NONE;
} else {
return index;
}
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
FragmentManager manager = ((Fragment) object).getFragmentManager();
FragmentTransaction trans = manager.beginTransaction();
trans.remove((Fragment) object);
trans.commit();
}
}