[英]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.