Viewpager无法正确更新

时间:2014-11-24 17:40:21

标签: android-fragments android-viewpager android-spinner

我正在创建一个具有包含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布局文件来查看我的视图,并在所有片段中扩展这些视图

第一次加载片段时一切正常但是当我从微调器中选择一个项目时,片段会显示我在输入第一个微调器项时输入的预输入值。

这是我的应用的快照

enter image description here

1 个答案:

答案 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);