我在我的View Pager中使用FragmentStatePagerAdapter
。如果isViewFromObject (View view, Object object)
返回false
,则返回的片段不会显示在屏幕上。这是为什么?
开发人员文档说Determines whether a page View is associated with a specific key object as returned by instantiateItem(ViewGroup, int). This method is required for a PagerAdapter to function properly.
但我不清楚这个定义。
答案 0 :(得分:16)
方法instantiateItem(ViewGroup, int)
为特定视图返回Object
。 PagerAdapter
实现在viewpager更改页面时将此Object
视为key
值。
因此,如果我们从instantiateItem(ViewGroup, int)
返回视图本身,那么该页面的key
将成为视图本身。我们可以从return view == object;
检查isViewFromObject (View view, Object object)
,它将始终返回true
,我们的页面会显示:
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
来自帖子https://stackoverflow.com/a/16772250/1994950的更多见解:
当您滑动时,ViewPager
从数组中获取视图位置或实例化它,并将此视图与ViewPager
的子项与适配器方法public boolean isViewFromObject(View view, Object object)
进行比较。在ViewPager
上向用户显示等于对象的视图。如果没有视图,则显示空白屏幕。
以下是ViewPager
方法,其中视图与object进行比较:
ItemInfo infoForChild(View child) {
for (int i=0; i<mItems.size(); i++) {
ItemInfo ii = mItems.get(i);
if (mAdapter.isViewFromObject(child, ii.object)) {
return ii;
}
}
return null;
}