android使用ViewHolder对ListView进行优化
2015-09-12 17:42
495 查看
使用ViewHolder对ListView进行优化,可以使ListView减少很多不必要的重复操作
自定义一个内部类,把adapter中的控件放在里面声明,初始化控件的时候判断convertView是否为空,若是为空的话则按照常规初
始化,然后在后面加上convertView.setTag(viewHolder); 当下一次执行时,若convertView不为空,则可以直接使用
viewHolder = (ViewHolder) convertView.getTag();来对控件进行初始化,这样可以省去很多的不必要操作,示例代码如下:
自定义一个内部类,把adapter中的控件放在里面声明,初始化控件的时候判断convertView是否为空,若是为空的话则按照常规初
始化,然后在后面加上convertView.setTag(viewHolder); 当下一次执行时,若convertView不为空,则可以直接使用
viewHolder = (ViewHolder) convertView.getTag();来对控件进行初始化,这样可以省去很多的不必要操作,示例代码如下:
public class MenuItemAdapter extends BaseAdapter { private List<Map<String, String>> data; Context context; public MenuItemAdapter(Context context, List<Map<String, String>> data) { // TODO 自动生成的构造函数存根 this.context = context; this.data = data; } @Override public int getCount() { // TODO 自动生成的方法存根 return data.size(); } @Override public Object getItem(int position) { // TODO 自动生成的方法存根 return data.get(position); } @Override public long getItemId(int position) { // TODO 自动生成的方法存根 return position; } @SuppressLint("ViewHolder") @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO 自动生成的方法存根 ViewHolder viewHolder = null; if (null == convertView) { convertView = LayoutInflater.from(context).inflate( R.layout.adapter_menuitem, null); viewHolder.menuitem_layout = (LinearLayout) convertView .findViewById(R.id.menuitem_layout); viewHolder.image_item = (ImageView) convertView .findViewById(R.id.image_item); viewHolder.dishes_item = (TextView) convertView .findViewById(R.id.dishes_item); viewHolder.price_item = (TextView) convertView .findViewById(R.id.price_item); 4000 viewHolder.order_btn = (Button) convertView .findViewById(R.id.order_btn); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.dishes_item.setText(data.get(position).get("meal_name")); viewHolder.price_item.setText("价格:" + data.get(position).get("price")); if (position % 2 != 0) { viewHolder.menuitem_layout.setBackgroundColor(Color .parseColor("#2c2c2c")); } return convertView; } private static class ViewHolder { //使用ViewHolder优化ListView的性能,减少一些不必要的重复操作 ImageView image_item; TextView dishes_item, price_item; Button order_btn; LinearLayout menuitem_layout; } }
相关文章推荐
- 通过Fragment + Viewpager+Gridview实现Android Tab切换菜单
- Android中SQLite应用详解
- ios 类似android的toast
- Android 数据存数---SQLite数据库
- Android实战简易教程-第五十七枪(分享小米手电筒源码)
- 2016最新Android安卓短信拦截(过Android4.4和Android5.0和Android5.1)源码
- Android中Popupwindow和Dialog的区别
- Android中Popupwindow和Dialog的区别
- Android中Popupwindow和Dialog的区别
- Android Studio SVN 出现“Subversion command line client version is too old”
- android中修改actionbar的背景颜色和字体颜色等
- Intent深入解剖
- Android下ListView的学习
- Git 常用命令
- 导入Android自带Sample工程出错解决(Error retrieving parent for item)
- Android中的颜色设置
- Android中的颜色设置
- Android 之 自定义标签 和 自定义组件 TypedArray
- Android(java)学习笔记234: 服务(service)之音乐播放器
- Android下相机的调用