Android课堂笔记——BaseAdapter及其优化
2016-12-12 22:04
316 查看
BaseAdapter概述:
BaseAdapter就Android应用程序中经常用到的基础数据适配器,它的主要用途是将一组数据传到像ListView、Spinner、Gallery及GridView等UI显示组件,它是继承自接口类Adapter,在MVC框架中,担任适配器的角色
*注 控制器:是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
需要重写的四个方法
使用BaseAdapter必须写一个类继承它,同时BaseAdapter是一个抽象类,继承它必须实现它的方法。BaseAdapter的灵活性就在于它要重写很多方法
需要重写的方法如下:
1.getCount() 我们将要绘制的资源数。
2.getView() 通过传入的参数position,加工成我们想要的View并返回,最终供GridView使用
3.getItemId() 该方法的返回值决定第position处的列表项的ID,某些方法(如onclicklistener的onclick方法)有id这个参数,而这个id参数就是取决于getItemId()这个返回值的。
4.getItem() getItem方法不是在Baseadapter类中被调用的,而是在Adapterview.getItemAtPosition(position) 中被调用的。getItemAtPosition(position) 是在setOnItemClickListener、setOnItemLongClickListener、setOnItemSelectedListener的点击选择处理事件中方便地调用来获取当前行数据的。
其中getView方法是最为重要的一个方法,并且会涉及到程序优化的问题,这样将会大大的提高代码的执行效率,从而加强程序的用户体验,而大部分的优化都是从对getView方法不同方式的重写而体现的,这里有三种方法重写getView,分别对这个方法有不同程度的优化。
方法一:完全没有任何的优化
方法二:普通的优化
这个方法主要运用了ConvertView回收机制来减少方法的多次调用,减少了方法一中
方法三:最终版本的优化
这段代码处理利用了ConvertView回收机制并且同时也使用了ViewHolder来减少findViewById的执行次数,从而达到最终的优化。
ViewHolder类:通常出现在适配器里,为的是listview滚动的时候快速设置值,而不必每次都重新创建很多对象,从而提升性能。
BaseAdapter就Android应用程序中经常用到的基础数据适配器,它的主要用途是将一组数据传到像ListView、Spinner、Gallery及GridView等UI显示组件,它是继承自接口类Adapter,在MVC框架中,担任适配器的角色
*注 控制器:是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
需要重写的四个方法
使用BaseAdapter必须写一个类继承它,同时BaseAdapter是一个抽象类,继承它必须实现它的方法。BaseAdapter的灵活性就在于它要重写很多方法
需要重写的方法如下:
1.getCount() 我们将要绘制的资源数。
2.getView() 通过传入的参数position,加工成我们想要的View并返回,最终供GridView使用
3.getItemId() 该方法的返回值决定第position处的列表项的ID,某些方法(如onclicklistener的onclick方法)有id这个参数,而这个id参数就是取决于getItemId()这个返回值的。
4.getItem() getItem方法不是在Baseadapter类中被调用的,而是在Adapterview.getItemAtPosition(position) 中被调用的。getItemAtPosition(position) 是在setOnItemClickListener、setOnItemLongClickListener、setOnItemSelectedListener的点击选择处理事件中方便地调用来获取当前行数据的。
其中getView方法是最为重要的一个方法,并且会涉及到程序优化的问题,这样将会大大的提高代码的执行效率,从而加强程序的用户体验,而大部分的优化都是从对getView方法不同方式的重写而体现的,这里有三种方法重写getView,分别对这个方法有不同程度的优化。
方法一:完全没有任何的优化
public View getView(int position, View convertView, ViewGroup parent) { int num =list.get(position); View view = View.inflate(context,R.layout.myitem, null); TextView textView = (TextView) view.findViewById(R.id.tv); textView.setText(num + ""); return view; }
方法二:普通的优化
public View getView(int position, View convertView, ViewGroup parent) { int num=list.get(position); if (convertView == null) { convertView = View.inflate(context, R.layout.myitem, null); } TextView textView=(TextView)convertView.findViewById(R.id.tv); textView.setText(num+""); return convertView;
这个方法主要运用了ConvertView回收机制来减少方法的多次调用,减少了方法一中
View view = View.inflate(context,R.layout.myitem, null);这段代码的重复使用,从而对方法进行了优化,但是优化不彻底,findViewById还是会次次执行。
方法三:最终版本的优化
public View getView(int position, View convertView, ViewGroup parent) { int num = list.get(position);// 2 ViewHolder viewHolder; if (convertView == null) { convertView = View.inflate(context, R.layout.myitem, null); viewHolder = new ViewHolder(); viewHolder.textView = (TextView) convertView.findViewById(R.id.tv); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.textView.setText(num + ""); return convertView; } // 起到缓存作用的类ViewHolder static class ViewHolder { TextView textView; } }
这段代码处理利用了ConvertView回收机制并且同时也使用了ViewHolder来减少findViewById的执行次数,从而达到最终的优化。
ViewHolder类:通常出现在适配器里,为的是listview滚动的时候快速设置值,而不必每次都重新创建很多对象,从而提升性能。
相关文章推荐
- Android实用笔记——BaseAdapter的使用与优化
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的优化笔记!
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- android BaseAdapter(修改优化)
- 优化Android上的Java代码【笔记】
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- 【Android】以BaseAdapter做适配器的ListView及其性能优化
- 关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- Android移动开发 ListView使用BaseAdapter与ListView的优化,内存优化处理(转载)
- Android ListView使用BaseAdapter与ListView的优化
- 15—关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- 【转】Android 面试题笔记-------android五种布局及其作用
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- android性能优化学习笔记-listview优化
- Android 面试题笔记-------android五种布局及其作用
- Android 开发笔记七 BaseAdpater 的使用及优化方法
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!