·使用:
①public View getView(int position, View convertView, ViewGroup parent) { }中的convertView参数
②ViewHolder
可以优化ListView。
*converView:让新显示在屏幕中的item使用划出屏幕外的item的view,从而避免了创建新的view
*ViewHolder:避免每次显示一个item都要重新寻找控件。
1、 注:与上一篇《ListView视图控件与Adapter适配器的使用》博文关联
package cn.edu.sjzc;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private ListView listView;
//定义适配器需要的数据
private String[] name = {"不欢乐斗地主","赔钱打麻将","赔钱打麻将","赔钱打麻将","赔钱打麻将","赔钱打麻将","赔钱打麻将","赔钱打麻将","赔钱打麻将"};//名字
private int[] images = {R.mipmap.doudizhu,R.mipmap.majiang,R.mipmap.majiang,R.mipmap.majiang,R.mipmap.majiang,R.mipmap.majiang,R.mipmap.majiang,R.mipmap.majiang,R.mipmap.majiang};//图片
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.myListView);
//使用适配器
MyAdapter myAdapter = new MyAdapter();
listView.setAdapter(myAdapter);//设置我们的adapter
}
//创建适配器类,继承BaseAdapter
class MyAdapter extends BaseAdapter{
@Override
public int getCount() {
return name.length;//确定显示多少条item
}
@Override
public Object getItem(int position) {
return name[position];
}
@Override
public long getItemId(int position) {
return position;
}
//得到itemview 的视图
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//使用View.inflate()方法,将一个布局转换成一个view对象
/*View view = View.inflate(MainActivity.this, R.layout.list_item, null);//参数2:要转换的布局
ImageView item_image = view.findViewById(R.id.item_image);
TextView item_text = view.findViewById(R.id.item_text);*/
//设置图片和内容
/*item_image.setBackgroundResource(images[position]);
item_text.setText(name[position]);//postion从0开始
return view;*/
/*
* 以下是进行优化
* */
//创建ViewHolder
ViewHoler viewHoler;
if (convertView == null){//convertView为空,说明listView是刚刚加载出来的状态
//将item的布局转换成一个view对象。类似于View的inflate()方法
convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.list_item,null);//from(当前应用的上下文对象).inflate(被转换的布局对象,null)
viewHoler = new ViewHoler();//实例化
//给放在ViewHolder里的控件赋值
viewHoler.item_image = convertView.findViewById(R.id.item_image);
viewHoler.item_text = convertView.findViewById(R.id.item_text);
}else {//此时就复用convertView对象,来进行优化
viewHoler = (ViewHoler) convertView.getTag();
}
//设置数据
viewHoler.item_image.setBackgroundResource(images[position]);
viewHoler.item_text.setText(name[position]);
return convertView;//返回convertView
}
}
//定义viewholder类
class ViewHoler{
//将item布局中的控件,声明在这个类中
ImageView item_image;
TextView item_text;
}
}