listView使用及优化的浅显理解

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赋值,相对来说会快捷很多吧
这里还是上图弥补一下我的语文水平吧

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值