0

我正在使用 aFragmentStatePagerAdapter和 a ViewPager

一切正常。如果我使用空适配器打开我的活动,ViewPager则为空,如果我添加项目,则ViewPager更新正确。

但是,如果我打开我的活动并删除我的最后一项ViewPagerViewPager则不会正确失效并保持最后一项Fragment可见。

我怎样才能避免这种情况?

我正在使用我的库,它是 ViewPager + ViewPagerIndicator + FragmentPager(State)Adapter 的包装类:

它实现了一个简单的 FragmentStatePagerAdapter 对它的片段的弱引用......

我的代码如下所示:

mPagerManager = new MPagerManager<ExerciseViewFragment, MFragmentPagerStateAdapter<ExerciseViewFragment>>(pager, tpi,
            new MFragmentPagerStateAdapter<ExerciseViewFragment>(fragmentManager)
            {
                @Override
                public CharSequence getPageTitle(int pos)
                {
                    return mData.workout.getWExercise().get(pos).getExercise().getName();
                }

                @Override
                public int getCount()
                {
                    return mData.workout.getWExercise().size();
                }

                @Override
                public ExerciseViewFragment createFragment(int pos)
                {
                    return ExerciseViewFragment.newInstance(pos, mData.workout.getWExercise());
                }
            });

我正在调用mPagerManager.notifyDataSetChanged();它直接将调用转发到 FragmentPagerStateAdapter ...

PS:我知道,如果项目数为 0,我可以让它不可见......但我想知道是否有更好的解决方案

4

1 回答 1

0

这是一个老问题,但我认为您可能仍然需要知道该怎么做。这是很常见的问题。ViewPager 不会使已经创建的视图无效(包括在当前视图的左侧和右侧准备好的视图)。解决这个问题非常容易。只需在您的适配器中实现以下方法,如下所示:

@Override
public int getItemPosition(Object object) {
    return POSITION_NONE;
}

默认情况下,此方法返回 PagerAdapter.POSITION_UNCHANGED。

对于大多数开发人员来说,这种方法的使用具有误导性,我自己也遇到了这个问题,直到我意识到这个方法被用来ViewPager.dataSetChanged()确定应该重新创建哪些项目。使用上面的代码,您告诉 ViewPager 在数据集更改时重新创建所有项目。

于 2014-05-14T10:22:52.140 回答