listView使用及优化的浅显理解

来源:互联网 发布:在线vip视频解析源码 编辑:程序博客网 时间:2024/05/21 11:04

listView使用及优化的浅显理解

先来说下我对listview简单的理解

代码一般由三部分成:
  • 子项布局文件
  • 重写的适配器类
  • 数据类(存放要在listview中显示的数据)
  • 再就是在活动中写的listview部分的代码

先说一下listview要做的事

listview只是提供了显示的功能,其他所有的东西基本都是直接交给adapter去实现的,因为listview并不能事先知道你数据的类型和布局的类型,如果这些东西都交给listview去实现的话,代码明显会变得非常繁琐,listview做的事只是将他需要的适配器拿到就OK了

看一下adapter做的事

public class MyAdapter extends ArrayAdapter<things> {    private int ResourceID;    public MyAdapter(Context context, int ResourceID, List<things> thingsList){        super(context,ResourceID,thingsList);        this.ResourceID = ResourceID;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        things things = getItem(position);        View view;        ViewHolder viewHolder;        if(convertView == null){            view = LayoutInflater.from(getContext()).inflate(ResourceID,parent,false);            viewHolder = new ViewHolder();            viewHolder.s = view.findViewById(R.id.wenzixianshi);            view.setTag(viewHolder);        }else {            view = convertView;            viewHolder = (ViewHolder) view.getTag();        }        viewHolder.s.setText(things.getS());        return view;    }    class ViewHolder{        TextView s;    }}

adapter做的事就是将一个个子项view创建并显示,

  • 刚开始adapter会去创建一个集合,然后创建一个子项view之后(计算他所占的屏幕大小)并将之加到集合中
  • 当检查到屏幕没有多余空间的时候,就停止创建view,然后将之显示在listview中(这里的顺序不是特别清楚)
  • 当程序检测到listview滑动的时候,会通过参数position来确定此时接下来需要显示的view需要填充哪一个数据项
  • 此时会有一个view被滑出屏幕空间,就会被添加到一个叫做view回收的集合中
  • 此时在convertView返回的参数就不是空了,他所带的内容是view回收集合中的应经被回收的view,此时就不需要重新传建新的view实例了,会大大的省略时间
  • 这里我用了一个内部类去保存每个view的数据,以便下次就不需要用findviewByID()去寻找控件了,将这个内部类绑定到view上面
  • 这样的话就是每个view都会带一个数据类,然后当快速滑动的时候,每次都只是通过参数position拿到当前数据项,给view的ViewHolder赋值,相对来说会快捷很多吧
这里还是上图弥补一下我的语文水平吧

这里写图片描述
这里写图片描述