繁体   English   中英

ViewPager-适配器为空后更新视图

[英]ViewPager - update view after adapter got empty

我正在将FragmentStatePagerAdapterViewPager一起使用。

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

但是,如果我打开活动并删除ViewPager的最后一项,则ViewPager不会正确无效并使最后一个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,我可以使其不可见...但是我想知道是否有更好的解决方案

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM