12

我很好奇为什么instantiateItem不赞成使用它的新版本。变化是它现在接收ViewGroup而不是更通用的View.

已弃用的方法

public Object instantiateItem (View container, int position)

新方法

public Object instantiateItem (ViewGroup container, int position)

注意:此更改也发生在destroyItem, startUpdate, finishUpdate&setPrimaryItem上。

4

2 回答 2

12

我的猜测是这样做是因为这些方法总是用 aViewGroup而不是更通用的View. 因此,将参数作为 a 提供ViewGroup是一种方便,允许开发人员避免总是检查和强制转换输入。所以不要一遍又一遍地看到这段代码:

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

实现者可以直接使用container

而且,事实上,您可以看到这正是Adam Powell 提交消息中的原因:

错误 5327146 - ViewPager API 调整和文档

PagerAdapter 以前将 View 实例作为其几个方法的参数,导致在适配器实现中大量转换为 ViewGroup。

更改这些以获取 ViewGroups。默认实现调用具有现有签名的已弃用存根,允许当前适配器保持不修改的工作。

于 2013-12-12T16:42:48.780 回答
1

The thing is container for ViewPager is supposed to contain other views and it really doesn't make any sense to pass an object of general view in that method as the container is always going to be a ViewGroup.

于 2013-12-12T16:19:27.867 回答