簡體   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