【发布时间】:2018-01-03 04:40:11
【问题描述】:
在this example 之后,我正在尝试在 ViewPager 的单个选项卡中将一个片段替换为另一个片段。我得到了这个例外:
java.lang.IllegalStateException: Can't change tag of fragment DailyWordFragment
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 管理片段实例的生命周期。
-
因为我正在尝试在一个选项卡中进行片段交换。
标签: android android-viewpager illegalstateexception