美文网首页Android开发Android开发
Android ViewHolder 的基本使用

Android ViewHolder 的基本使用

作者: 李铭淋 | 来源:发表于2017-03-14 10:04 被阅读8350次

    标签: Android Adapter ViewHolder


    Adapter 的理解

    Adapter :适配器,因为 ListView 是一个 View ,不能添加子项,因此在呈现数据的时候就需要某种工具将数据呈现在 ListView 上,而 Adapter 就能充当此角色。常用的 Adapter:ArrayAdapter、BaseAdapter等。


    ViewHolder 的理解

    要想使用 ListView 就需要编写一个 Adapter 将数据适配到 ListView上,而为了节省资源提高运行效率,一般自定义类 ViewHolder 来减少 findViewById() 的使用以及避免过多地 inflate view,从而实现目标。


    Adapter的定义

    1. 继承 BaseAdapter (可在继承的时候指定泛型,扩展使用);
    2. 重写四个基本方法:
      getCount():获取数据的总的数量,返回 int 类型的结果;
      getItem(int position) :获取指定位置的数据,返回该数据;
      getItemId(int position):获取指定位置数据的id,返回该数据的id,一般以数据所在的位置作为它的id;
      getView(int position,View convertView,ViewGroup parent):关键方法,用于确定列表项
    3. 创建 ViewHolder (包含列表项的控件。)

    代码展示(部分)

    public class MyListAdapter extends BaseAdapter // 类定义
    

    // 自定义数据集与布局加载器
    List<Note> notes;
    LayoutInflater inflater;
    

    /** 构造方法 */
    public MyListAdapter(Context context,List<Note> notes){
        this.notes = notes;
        inflater = LayoutInflater.from(context);
    }
    

    /** 重写方法 */
    @Override
    public int getCount(){
        return notes.size();
    }
    @Override
    public Object getItem(int position){
        return notes.get(position);
    }
    @Override
    public long getItemId(int position){
        return position;
    }
    @Override
    public View getView(int position,View convertView,ViewGroup parent){
        ViewHolder viewHolder;
        // 若无可重用的 view 则进行加载
        if(converView == null){
            convertView = inflater.inflate('列表项布局文件',parent,false);
            // 初始化 ViewHolder 方便重用
            viewHolder = new ViewHolder();
            viewHolder.tvTitle = (TextView) convertView.findViewById('id1');
            viewHolder.tvContent = (TextView) convertView.findViewById('id2');
            converView.setTag(viewHolder);
        }else{ // 否则进行重用
            viewHolder = (ViewHolder)convertView.getTag();
        }
        // 获得条目内容对象
        Note note = notes.get(position);
        // 设置内容(Note Bean 需要自定义)
        viewHolder.tvTitle.setText(note.getTitle());
        viewHolder.tvContent.setText(note.getContent());
        return converView;
    }
    

    /** 创建 ViewHolder */
    class ViewHolder{
        TextView tvTitle;
        TextView tvContent;
    }
    

    至此,一个比较基础的 Adapter 已经完成,里面包含了 ViewHolder 的基本使用,初学者可以参考次文档进行 Adapter 的编写。

    • 2017.3.7

    相关文章

      网友评论

      本文标题:Android ViewHolder 的基本使用

      本文链接:https://www.haomeiwen.com/subject/xjpcnttx.html