1,关于BaseAdapter
继承这个方法,重新4个方法。
其中,LayoutInFlater是用来加载android布局文件的。
这个类里需要三个参数,一是数据的列表,list<封装好的列表需要的数据>。二是int类型参数,用来加载列表布局名称的,其三是Context,用来给LayoutInFlate的inflate方法里的root参数默认为空。
然后生成他们的构造方法
重写的四个方法,第一个getCount()。用来表示生成窗体的数量。可以认为,数组中元素有多少个,窗体就有多少个。第二个方法getItem()。用来返回当前position位置的这一条数据,可以理解为数组中position位置的元素。第三个方法getItemId()。用来返回当前position位置的这一条数据ID。
第四个,重点:getView()。处理view和数组填充数据的这一过程。
第一个参数,position,当前位置,从0开始。
第二个参数,convertView,是Spinner,listview,gridview显示时用的窗体
第三个参数,parent,是父窗体,不过我没用。
首先,我们需要在方法里拿到所有数据,就是数值的全部数据。之后把数据分别get出来。
其次,我们需要绑定控件,这个简单,使用LayoutInFlater的.from(context)和.inflate(之前用来加载数据名称的int类型数据,null);
然后绑定控件,就是findviewById();
最后装载数据,图片我还是推荐用Glide,容错率低
在使用时,我们创建一个List<封装好的列表需要的数据>列表。然后一个循环,循环里直接add(new 封装名称(数据循环));最后把适配器装进列表名称里。
他需要是数据格式是你的每一条列表里显示的所有数据,并不想HM那个一样,需要String索引。
样例:
public class Liebiaospq extends BaseAdapter {
private List<Lbsj> lbsjs = new ArrayList<>();//加载列表数据
private int zzlbbj;
private Context context;
public Liebiaospq(List<Lbsj> lbsjs, int zzlbbj, Context context) {
this.lbsjs = lbsjs;
this.zzlbbj = zzlbbj;
this.context = context;
}
@Override
//窗体的数量
public int getCount() {
return lbsjs.size();
}
@Override
//返回当前position位置的这一条数据
public Object getItem(int position) {
return lbsjs.get(position);
}
@Override
//返回当前position位置的这一条数据的ID
public long getItemId(int position) {
return position;
}
@SuppressLint("ViewHolder")
@Override
//处理view和data填充数据的一个过程
//position:从0开始
//convertView:是Spinner,ListView中每一项要显示的view
//parent:父窗体,也就是Spinner,ListView,GridView了
//通常return的view也就是convertView
public View getView(int position, View convertView, ViewGroup parent) {
//首先,我们先拿到数据,
Lbsj lbsj = lbsjs.get(position);
String wenzi = lbsj.getWenzi();
int tupian = lbsj.getTupian();
//绑定控件并且装载数据
LayoutInflater layoutInflater = LayoutInflater.from(context);
View inflate = layoutInflater.inflate(zzlbbj, null);
//绑定控件
ImageView imageView = inflate.findViewById(R.id.tupian);
TextView textView = inflate.findViewById(R.id.wenzi);
//装载控件,图片我还是推荐用Glide
Glide.with(imageView.getContext()).load(tupian).into(imageView);
textView.setText(wenzi);
return inflate;
}
}
主方法里:
public void Gnan(){
for (int i = 0;i<tupian.length;i++){
lbsjs.add(new Lbsj(wenzi[i],tupian[i]));
}
Liebiaospq liebiaospq = new Liebiaospq(lbsjs, R.layout.lbbj, getActivity());
gridView.setAdapter(liebiaospq);
}