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

时间:2013-12-12 16:10:07

标签: android android-pageradapter

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

弃用的方法

public Object instantiateItem (View container, int position)

新方法

public Object instantiateItem (ViewGroup container, int position)

注意:此更改也发生在destroyItemstartUpdatefinishUpdate& setPrimaryItem

2 个答案:

答案 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。