我很好奇为什么instantiateItem
被弃用以支持它的新版本。更改是它现在收到ViewGroup
而不是更一般的View
。
弃用的方法
public Object instantiateItem (View container, int position)
新方法
public Object instantiateItem (ViewGroup container, int position)
注意:此更改也发生在destroyItem
,startUpdate
,finishUpdate
& setPrimaryItem
。
答案 0 :(得分:12)
我的猜测是它完成了,因为这些方法总是使用ViewGroup
而不是更通用的View
来调用。因此,将参数提供为ViewGroup
是一种便利,允许开发人员避免始终检查和转换输入。所以不要一遍又一遍地看到这段代码:
ViewGroup parent;
if (container instanceof ViewGroup) {
parent = (ViewGroup) container;
}
else {
throw new IllegalArgumentException("container must be a ViewGroup");
}
实施者可以直接使用container
。
事实上,你可以看到这正是commit message from Adam Powell中的原因:
错误5327146 - ViewPager API调整和文档
PagerAdapter之前将View实例作为参数作为几个参数 其方法导致在适配器中大量转换为ViewGroup 的实施方式。
更改这些以获取ViewGroups。默认实现调用 使用现有签名弃用的存根,允许当前 适配器保持未经修改的工作。
答案 1 :(得分:1)
事物是ViewPager的容器应该包含其他视图,并且在该方法中传递一般视图的对象实际上没有任何意义,因为容器总是将成为ViewGroup。