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

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

弃用的方法

 public Object instantiateItem (View container, int position) 

新的方法

 public Object instantiateItem (ViewGroup container, int position) 

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

  • 关于PagerAdapter的方法instantiateItem(ViewGroup容器,int位置)的一些混淆
  • 为什么在PagerAdapter中多次调用getCount?
  • FragmentPagerAdapter - 当用户转到新标签时如何检测滑动或标签点击?
  • Android View寻呼机适配器显示空白屏幕
  • PagerAdapter类被多次调用
  • Android:FragmentPagerAdapter:第一次调用两次getItem方法
  • 如果点击上一个项目,Android PagerAdapter不报告正确的位置
  • 屏幕方向更改后,从ViewPager的适配器中销毁项目
  • 我的猜测是这样做的,因为这些方法总是用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。