FragmentStatePagerAdapter中“isViewFromObject(视图视图,对象对象)”的作用是什么?

时间:2015-06-23 06:33:11

标签: android android-viewpager

我在我的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.但我不清楚这个定义。

1 个答案:

答案 0 :(得分:16)

方法instantiateItem(ViewGroup, int)为特定视图返回ObjectPagerAdapter实现在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;
}