不推荐使用PagerAdapter.instantiateItem()方法

我很好奇,为什么instantiateItem被弃用,以支持它的新版本。 变化是它现在接收ViewGroup而不是更一般的View

弃用的方法

 public Object instantiateItem (View container, int position) 

新的方法

 public Object instantiateItem (ViewGroup container, int position) 

注意:这个改变也发生在destroyItemstartUpdatefinishUpdatesetPrimaryItem

Solutions Collecting From Web of "不推荐使用PagerAdapter.instantiateItem()方法"

我的猜测是这样做的,因为这些方法总是用ViewGroup而不是更一般的View来调用。 因此,将该参数作为ViewGroup是一种方便,允许开发人员避免始终检查和投射input。 所以不是一遍又一遍地看到这个代码:

 ViewGroup parent; if (container instanceof ViewGroup) { parent = (ViewGroup) container; } else { throw new IllegalArgumentException("container must be a ViewGroup"); } 

实现者可以直接使用container

事实上,你可以看到这正是Adam Powell提交信息的原因:

Bug 5327146 – ViewPager API调整和文档

PagerAdapter先前将View实例作为其参数导入到适配器实现中的许多转换为ViewGroup的几个方法。

改变这些采取ViewGroups。 默认实现通过现有签名调用已弃用的存根,允许当前适配器保持未修改状态。

对于ViewPager容器的东西应该包含其他视图,它真的没有任何意义的传递在该方法中的一般视图的对象,因为容器总是要成为一个ViewGroup。