在FragmentStatePagerAdapter中,“isViewFromObject(View view,Object object)”的作用是什么?

29
我正在使用一个 FragmentStatePagerAdapter 来管理我的 View Pager。如果 isViewFromObject (View view, Object object) 返回 false,则返回的 Fragment 不会在屏幕上显示。为什么会这样?开发文档说:“确定页面 View 是否与由 instantiateItem(ViewGroup, int) 返回的特定键对象相关联。对于 PagerAdapter 正常运行,此方法是必需的。” 但是,我对这个定义不是很清楚。
1个回答

25

instantiateItem(ViewGroup, int)方法返回一个特定视图的Object。当viewpager切换页面时,PagerAdapter实现将此Object视为key值。

因此,如果我们从instantiateItem(ViewGroup, int)方法中返回视图本身,则该页面的key就是视图本身。我们可以通过检查isViewFromObject(View view, Object object)方法中的return view == object;来始终返回true,从而显示我们的页面:

public boolean isViewFromObject(View view, Object object) {
    return view == object;
}

以下是来自https://dev59.com/jmw05IYBdhLWcg3wXQwh#16772250的更多见解:

当您滑动时,ViewPager 从数组中获取或实例化视图位置,并将此视图与适配器方法 public boolean isViewFromObject(View view, Object object)ViewPager 子项进行比较。等于对象的视图会在 ViewPager 上显示给用户。如果没有视图,则显示空白屏幕。

这里是与对象进行比较的 ViewPager 方法:

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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接