[英]ViewPager - update view after adapter got empty
我正在将FragmentStatePagerAdapter
和ViewPager
一起使用。
一切正常。 如果使用空的适配器打开活动,则ViewPager
为空,如果添加项目,则ViewPager
正确更新。
但是,如果我打开活动并删除ViewPager
的最后一项,则ViewPager
不会正确无效并使最后一个Fragment
可见。
如何避免这种情况?
我正在使用我的库,它是ViewPager + ViewPagerIndicator + FragmentPager(State)Adapter的包装器类:
该类本身位于此处: https : //github.com/MichaelFlisar/PagerManager/blob/master/src/com/michaelflisar/pagermanager/MFragmentPagerStateAdapter.java
实现位于此处: https : //github.com/MichaelFlisar/PagerManager/blob/master/src/com/michaelflisar/pagermanager/MPagerAdapterHelper.java
它实现了一个简单的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.