Android ListView相关

来源:互联网 发布:产品展示网站php源码 编辑:程序博客网 时间:2024/05/01 23:47

    • ViewHolder 优化加载速度
    • 支持不同布局的item
    • 实例代码
    • 参考

记录一些listview的使用技巧。

ViewHolder 优化加载速度

通过convertView机制重用item,以及通过ViewHolder减少查找XML的时间。

@Override    public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder holder = null;        // 判断是否缓存        if (convertView == null) {            holder = new ViewHolder();            // 通过LayoutInflater实例化布局            convertView = mInflater.inflate(R.layout.notify_item, null);            holder.img = (ImageView) convertView.findViewById(R.id.imageView);            holder.title = (TextView) convertView.findViewById(R.id.textView);            convertView.setTag(holder);        } else {            // 通过tag找到缓存的布局            holder = (ViewHolder) convertView.getTag();        }        // 设置布局中控件要显示的视图        holder.img.setBackgroundResource(R.drawable.ic_launcher);        holder.title.setText(mData.get(position));        return convertView;    }    public final class ViewHolder {        public ImageView img;        public TextView title;    }

支持不同布局的item

ListView设置支持不同类型的item,比如我们支持两种类型的item,需要增加两个方法判断某个位置item的类型以及在getView中根据类型加载不同的布局。

@Override    public int getItemViewType(int position) {        ChatItemListViewBean bean = mData.get(position);        return bean.getType();    }    @Override    public int getViewTypeCount() {        return 2;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder holder;        if (convertView == null) {            if (getItemViewType(position) == 0) {                holder = new ViewHolder();                convertView = mInflater.inflate(                        R.layout.chat_item_itemin, null);                holder.icon = (ImageView) convertView.findViewById(                        R.id.icon_in);                holder.text = (TextView) convertView.findViewById(                        R.id.text_in);            } else {                holder = new ViewHolder();                convertView = mInflater.inflate(                        R.layout.chat_item_itemout, null);                holder.icon = (ImageView) convertView.findViewById(                        R.id.icon_out);                holder.text = (TextView) convertView.findViewById(                        R.id.text_out);            }            convertView.setTag(holder);        } else {            holder = (ViewHolder) convertView.getTag();        }        holder.icon.setImageBitmap(mData.get(position).getIcon());        holder.text.setText(mData.get(position).getText());        return convertView;    }    public final class ViewHolder {        public ImageView icon;        public TextView text;    }

实例代码

github

参考

博客1

0 0
原创粉丝点击