Android studio之ListView优化

前提代码

点击此处跳转

为什么要优化??因为有两个比较耗时间的地方
一个是获取控件:
在这里插入图片描述
另一个是inflater。

使用ViewHolder优化:

Android studio之ListView优化_第1张图片
Android studio之ListView优化_第2张图片
Android studio之ListView优化_第3张图片
MyAdapter.java 代码改为:

package com.example.listview;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;
import java.util.Map;

public class MyAdapter extends BaseAdapter {
    //数据集合list
    List> list;
    //添加反射器
    LayoutInflater inflater;
    //构造器 上下文
    public MyAdapter(Context context){
        inflater=LayoutInflater.from(context);
    }
    //传入数据集合
    public void setList( List> list){
        this.list=list;
    }
    @Override
    public int getCount() {
        return list.size();//lisview的长度,如果是null啥也不显示
    }
    @Override
    public Object getItem(int position) {//没什么用
        return list.get(position);
    }
    @Override
    public long getItemId(int position) {//没什么用
        return position;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder=null;
        if(convertView==null){
            convertView=inflater.inflate(R.layout.listview,null);
            holder=new ViewHolder();
            //填满holder,耗时间的操作放在此处
            holder.logo=(ImageView)convertView.findViewById(R.id.iv_image);
            holder.title=(TextView)convertView.findViewById(R.id.tv_title);
            holder.context=(TextView)convertView.findViewById(R.id.tv_context);
            convertView.setTag(holder);//setTag()存holder
        }else{
            //一个界面ListView显示有限,比如一页只能显示四个,那么从第五个开始
            holder=(ViewHolder)convertView.getTag();//getTag()取出,(ViewHolder)强转类型
        }
        Map map=list.get(position);
        //填充信息
        holder.logo.setImageResource((Integer) map.get("image"));
        holder.title.setText((String) map.get("text"));
        holder.context.setText((String) map.get("context"));
        //将含有信息的view返回到ListView
        return convertView;
    }
    public class ViewHolder{
        ImageView logo;
        TextView title;
        TextView context;
    }
}

你可能感兴趣的:(Android studio之ListView优化)