正在關注this example我試圖用ViewPager的單個選項卡中的另一個替換另一個片段。我得到這個異常: java.lang.IllegalStateException: Can't change tag of fragment DailyWordFragment
在ViewPager中替換片段會導致IllegalStateException
class ViewPagerAdapter extends FragmentPagerAdapter {
private final FragmentManager fragmentManager;
Fragment fragment;
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
fragmentManager = manager;
}
@Override
public Fragment getItem(int position) {
switch (position){
case 0:
if(fragment == null){
fragment = DailyWordFragment.newInstance();
}
return fragment;
case 1:
if(fragment == null){
fragment = WordListFragment.newInstance(new WordListFragment.OnWordItemAddListener() {
@Override
public void onWordItemAddListener() {
fragmentManager.beginTransaction().remove(fragment).commit();
fragment = AddWordFragment.newInstance();
notifyDataSetChanged();
}
});
}
return fragment;
default:
return null;
}
}
@Override
public int getItemPosition(Object object) {
if(object instanceof WordListFragment && fragment instanceof AddWordFragment)
return POSITION_NONE;
return POSITION_UNCHANGED;
}
@Override
public int getCount() {
return 2;
}
}
據其他職位這一例外似乎是由多次添加相同的片段,或者讓計數錯誤片段的數量造成的,但我不能看到上述任一是否正在發生?顯然我錯過了一些東西。我將不勝感激任何幫助。謝謝。
你爲什麼用viewpager裏面的片段經理做的事情?在getitem中,你應該返回一個Fragment的實例。 ViewPager管理片段實例的生命週期。 – Juan
因爲我試圖在一個選項卡中進行片段交換。 – Brian