Adapter作为安卓中数据显示和布局的重要组件,好好理解很重要。
下面是它的继承关系。
下面介绍几个比较常用的Adapter。
- ArrayAdapter
适合并且也只能显示单个文本条目,用法:
List<String> str = new ArrayList<>();
....
//填数据
//参数分别为上下文,单项布局,数据源。
ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.list_item, str);
//为listview设置adapter
listView.set(adapter);
- SimpleAdapter
Simple使用起来更加简单,但是,它可以为每一项设置多个参数,包括图片和文本。用法:
String[] images = new String[]{......};
String[] title = new String[]{"八重樱,永存于时间裂缝。---《崩坏三》", "加藤惠,路人女主结束了,她依旧如此。---《路人女主的养成方式》",
"椎名真白,如果喜欢是有颜色的,那一定是樱花色。---《樱花庄的宠物女孩》", "呆毛王,虽已然逝去,人们依旧称她如青莲。---《Fate》",
"渡边早季,在生物的进化过程中,没有能力的人被变为化鼠。---《新世界より》", "加藤惠,路人女主结束了,她依旧如此。---《路人女主的养成方式》"};
List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
for(int i=0;i<images.length/2;i++){
Map<String, Object> map = new HashMap<String, Object>();
map.put("image", images[2*i]);
map.put("介绍", title[2*i]);
map.put("image1", images[2*i+1]);
map.put("介绍1", title[2*i + 1]);
listItems.add(map);
}
//参数分别为上下文,数据源列表,布局列表,数据keys,单项数据显示项
SimpleAdapter adapter = new SimpleAdapter(getActivity(), listItems, R.layout.recycle_view_row, new String[]{"image", "介绍",
"image1", "介绍1"},
new int[]{R.id.image01, R.id.text01, R.id.image02, R.id.text02});
listView.setAdapter(adapter);
- BaseAdapter
BaseAdapter比较灵活,由于是抽象类,需要对它进行重写。用法:
BaseAdapter baseAdapter = new BaseAdapter() {
@Override
public int getCount() {
return images.length;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
//在这里设置每一个单项的属性,positon就是每一个项的下标,类似数组的下标
@SuppressLint("ViewHolder")
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
convertView = layoutInflater.inflate(R.layout.new_up_row, null);
TextView textView = (TextView) convertView.findViewById(R.id.up_name);
ImageView imageView = (ImageView) convertView.findViewById(R.id.up_image);
textView.setText(names[position]);
textView.setHeight(60);
textView.setWidth(120);
imageView.setImageResource(images[position]);
imageView.setMaxHeight(120);
imageView.setMaxWidth(120);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
return convertView;
}
};
gridView.setAdapter(baseAdapter);
适合需要更加复杂操作的适配操作。
- RecyclerAdapter
Android新推出的RecyclerView的适配器,RecycleAdapter。用法:
public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.MyViewHolder> {
private String[] mData;
//自定义holder
public static class MyViewHolder extends RecyclerView.ViewHolder{
public TextView textView;
public ImageView imageView;
public TextView textView1;
public ImageView imageView1;
public MyViewHolder(View view){
super(view);
textView = view.findViewById(R.id.text01);
// imageView = view.findViewById(R.id.image01);
// textView1 = view.findViewById(R.id.text02);
// imageView1 = view.findViewById(R.id.image02);
}
}
public RecycleAdapter(String[] mData){
this.mData = mData;
}
@NonNull
@Override
public RecycleAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycle_view_row, parent, false);
MyViewHolder vh = new MyViewHolder(view);
return vh;
}
@Override
public void onBindViewHolder(@NonNull RecycleAdapter.MyViewHolder holder, int position) {
holder.textView.setText(mData[position]);
// holder.textView1.setText("第二个");
}
@Override
public int getItemCount() {
return 0;
}
}
总而言之,使用SimpleAdapter和BaseAdapter就可以几乎满足大部分的需求了。