我正在创建一个具有包含viewpager的活动的应用程序,并且此viewpager充当六个片段的容器。该活动还有一个包含8个项目的微调器。我想要实现的是,当我从一个微调器中选择一个项目时,应该销毁viewpager中的片段,并且应该填充六个新的片段。
我正在使用 FragmentStatePagerAdapter 来实现这一目标。
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
public ScreenSlidePagerAdapter(FragmentManager manager, ArrayList<Fragment> fmList) {
super(manager);
pagerFragmentList = fmList;
}
@Override
public Fragment getItem(int position) {
return pagerFragmentList.get(position);
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public int getCount() {
return pagerFragmentList.size();
}
}
这是我加载新数据的方式。
pagerFragmentList.clear();
pagerFragmentList = newFragmentList;
mPagerAdapter.notifyDataSetChanged();
mPager.setCurrentItem(0);
正如我所说,我在viewpager中有6个片段,在spinner里面有8个项目,所以总共有48个片段类,但事实是我只使用6个xml布局文件来查看我的视图,并在所有片段中扩展这些视图
第一次加载片段时一切正常但是当我从微调器中选择一个项目时,片段会显示我在输入第一个微调器项时输入的预输入值。
这是我的应用的快照
答案 0 :(得分:0)
我不确定,但您可以尝试这种方式
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
public ScreenSlidePagerAdapter(FragmentManager manager, ArrayList<Fragment> fmList) {
super(manager);
pagerFragmentList = fmList;
}
@Override
public Fragment getItem(int position) {
return pagerFragmentList.get(position);
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public int getCount() {
return pagerFragmentList.size();
}
public void mDatasetChanged(ArrayList<Fragment> mFmList){
pagerFragmentList = mFmList;
this.notifyDataSetChanged();
}
}
然后在您的活动中
pagerFragmentList.clear();
pagerFragmentList = newFragmentList;
mPagerAdapter.mDatasetChanged(pagerFragmentList);
mPager.setCurrentItem(0);