ListView 优化

    xiaoxiao2021-03-25  122

    ListView 优化

    Listview 优化一

    viewHolder 的使用和convertView的复用 viewHolder相当于一个水果篮子,我们把要吃的水果,洗好先放到篮子了,我们要吃的时候直接吃就行了,不需要再一个一个拿去洗了,方便,省力。 首先讲下ListView的原理:ListView中的每一个Item显示都需要Adapter调用一次getView()的方法,这个方法会传入一个convertView的参数,这个方法返回的View就是这个Item显示的View。如果当Item的数量足够大,再为每一个Item都创建一个View对象,必将占用很多内存空间,即创建View对象(mInflater.inflate(R.layout.lv_item, null);从xml中生成View,这是属于IO操作)是耗时操作,所以必将影响性能。Android提供了一个叫做Recycler(反复循环)的构件,就是当ListView的Item从滚出屏幕视角之外,对应Item的View会被缓存到Recycler中,相应的会从生成一个Item,而此时调用的getView中的convertView参数就是滚出屏幕的缓存Item的View,所以说如果能重用这个convertView,就会大大改善性能。

    @Override public View getView ( int position, View convertView, ViewGroup viewGroup){ convertView//这里是复用的view MyViewHolder holder; if (convertView == null) { holder = new MyViewHolder(); convertView = LayoutInflate.from(MainActivity.this).inflate(R.layout.list_item, null, true); holder.textView = (TextView) convertView.findViewById(R.id.text); convertView.setTag(holder); } else { holder = (MyViewHolder) convertView.getTag(); } holder.textView.setText(“hello”); return convertView; } class MyViewHolder { TextView textView;//这里是把水果放到篮子里的操作 } }

    简单列表的复用 其中getView是渲染每个Item时进行回调生成View的,方法参数convertView就是ListView传回可以复用的View,当其不为null时,无需重新创建View,可以直接使用convertView,进行数据渲染即可。其原理是当第一次调用时ListView直接将生成的View缓存到一个ArrayList中,当需要时直接从ArrayList中取出即可:

    复杂列表复用 当列表中的item需要不同Item的时候

    @Override //返回view类型数量 public int getViewTypeCount() { return super.getViewTypeCount(); } @Override //返回每个Item的类型 public int getItemViewType(int position) { return super.getItemViewType(position); }

    转载请注明原文地址: https://ju.6miu.com/read-5427.html

    最新回复(0)