zoukankan      html  css  js  c++  java
  • Android编码学习之Adapter

    1. Apter的作用

    Adapter是将数据绑定到UI界面上的桥接类。Adapter负责创建显示每个项目的子View和提供对下层数据的访问。Adapter的作用就是将要在列表内显示的数据和列表本身结合起来。列表本身只完成显示的作用,其实他就是继承自VIEWGROUP类。但是他又有一个独特的函数就是setAdapter()就是完成了view和adapter的结合。adapter如同其本身含义,其实就是一个适配器,他可以对要显示的数据进行统一的封装,主要是将数据变成view提供给list。Android提供了以下Adapter:

    • BaseAdapter:抽象类,实际开发中我们会继承这个类并且重写相关方法,用得最多的一个Adapter!
    • ArrayAdapter:支持泛型操作,最简单的一个Adapter,只能展现一行文字~
    • SimpleAdapter:同样具有良好扩展性的一个Adapter,可以自定义多种效果!
    • SimpleCursorAdapter:用于显示简单文本类型的listView,一般在数据库那里会用到,不过有点过时,不建议使用。

    2. Adapter的使用举例

    https://blog.csdn.net/coder_pig/article/details/48157807  Android基础入门教程——2.4.1 Adapter基础讲解

    https://blog.csdn.net/coder_pig/article/details/48577231  Android基础入门教程——2.4.2 ListView简单使用

    3. Adapter与ViewHolder

    Holder主要用于缓存数据。这样只用加载一次布局文件,就可以生成一个存数据的容器。然后每次要加载数据的时候,直接把数据放容器里就ok,不用重新加载布局文件了。

    https://blog.csdn.net/coder_pig/article/details/48596683  Android基础入门教程——2.4.3 BaseAdapter优化

    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;
    }
    

      

  • 相关阅读:
    常用的正则表达式
    VScode格式化代码,开启ESlint代码检测方法,eslint代码配置
    git 常用的操作
    vscode 格式化的时候自动添加分号怎么去除
    echarts渐变色实现方法
    echart 柱状图 数值较小的时候,文字显示不全
    iview的Modal在提交表单时确认按钮loading状态冲突问题解决方案
    vue.js动态获取菜单
    12.18 webSocket消息推送
    12.18 微信模板消息推送
  • 原文地址:https://www.cnblogs.com/sunada2005/p/9664560.html
Copyright © 2011-2022 走看看