关于PagerAdapter的instantiateItem方法
来源:互联网 发布:vscode golang 格式化 编辑:程序博客网 时间:2024/06/06 03:18
关于PagerAdapter的instantiateItem方法,有需要的朋友可以参考下。
之前以为ViewPager每次滑动都会调用instantiateItem,后来做项目时发现有时滑动时并不执行写在instantiateItem中的一些更新操作。于是写了个demo测试一下,代码如下:
public class MainActivity extends Activity {ViewPager pager;List<View> views;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);pager = (ViewPager)findViewById(R.id.view_pager);views = new ArrayList<View>();LayoutInflater mLi = LayoutInflater.from(this); View view1 = mLi.inflate(R.layout.view1, null); View view2 = mLi.inflate(R.layout.view2, null); View view3 = mLi.inflate(R.layout.view3, null); views.add(view3); views.add(view2); views.add(view1);MyPagerAdapter adapter = new MyPagerAdapter();pager.setAdapter(adapter);}class MyPagerAdapter extends PagerAdapter{@Overridepublic int getCount() {// TODO Auto-generated method stubreturn views.size();}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {// TODO Auto-generated method stubreturn arg0 == arg1; //这行代码很重要,它用于判断你当前要显示的页面}@Override public Object instantiateItem(ViewGroup container, int position) { container.addView(views.get(position)); Log.d("tag",String.valueOf(position)); return views.get(position); } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(views.get(position)); } }}运行时,当我进入第一页时,log打印 0和1,当我滑到第二页时,log打印2,当我滑到第三页时,log没有输出信息。
所以我觉得是这样的。因为pagerAdapter是默认预加载前后一张的,所以当加载第一页时。调用了两次instantiateItem方法,第一次是加载本来的第一页,第二次是预加载第二页,所以log打印了0和1。可是显示的本来加载的第一页。当滑动到第二页时,只调用了一次instantiateItem方法,是因为本页已经在之前预加载过了,没有再调用instantiateItem方法也就是log不会再打印1,而是直接从ViewGroup中直接取出第二页用于显示。然后进行预加载第三页,所以这里会调用instantiateItem方法并打印2.接着滑动到第三页,由于第三节页也已经预加载过了,所以只是从ViewGroup取出第三页显示而不调用instantiateItem。但是由于预加载默认是前后一张,所以这时会从ViewGroup中取出第一页销毁。直到从第三页滑到第二页时才会再预加载第一页。
0 0
- 关于PagerAdapter的instantiateItem方法
- 关于PagerAdapter的instantiateItem方法
- 关于PagerAdapter的instantiateItem方法
- 理解PagerAdapter的instantiateItem()方法
- 关于PagerAdapter的instantiateItem方法的执行次数
- PagerAdapter的instantiateItem执行次数
- ViewPager适配PagerAdapter的时候 instantiateItem方法报错的处理
- android viewpager instantiateItem方法的position参数
- PagerAdapter的几个方法
- Android关于Pageradapter的总结
- 记录PagerAdapter重写的方法
- Android - ViewPager使用PagerAdapter,instantiateItem时出现IndexOutOfBoundsException
- Android - ViewPager使用PagerAdapter,instantiateItem时出现IndexOutOfBoundsException
- Android - ViewPager使用PagerAdapter,instantiateItem时出现IndexOutOfBoundsException
- 关于PagerAdapter的使用方法的总结
- Android关于PagerAdapter的使用方法的总结
- Android关于PagerAdapter的使用方法的总结
- Android关于PagerAdapter的使用方法的总结
- C++关于转换构造函数自动调用的问题
- 什么时候全表扫描比使用索引扫描能更快?
- c++ Log库,调试库
- 开发者网站
- Android下drawable,Bitmap,Canvas与Paint区别
- 关于PagerAdapter的instantiateItem方法
- Android布局中实现圆角边框
- merge sort 一些变种、应用
- 【ASP.NET北大青鸟】--添加广告控件
- HDU2089(数位DP)
- 史上功能最全面的图形锁
- 【4-1 前端模块】跳板机服务系统设计及实现
- python27 in Centos6
- C++作业4.22