文章目录
一、案例演示
为了实现面向对象,便于后期数据的添加和修改,我们使用自定义适配器来完成功能,简单适配器和自定义适配器完成项目结果相同,但是过程并不相同。
1、activity.xml 整体布局页面
整体布局线形布局,有一个listview控件用于存放数据
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem="@layout/support_simple_spinner_dropdown_item"/>
</LinearLayout>
2、item_list.xml 列表项布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ImageView
android:id="@+id/iv_icon"
android:layout_width="0dp"
android:layout_height="100dp"
android:layout_weight="1"
android:gravity="center" />
<TextView
android:id="@+id/tv_name"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"
android:gravity="center"
android:textSize="17sp"
android:textColor="#ff0000" />
</LinearLayout>
二、普通适配器(SimpleAdapater)
1、MainActivity.java
listView=findViewById(R.id.listview);
//准备数据
String names[]=new String[]{"路飞","娜美","山治","索隆"};
int images[]=new int[]{R.drawable.lufei,R.drawable.namei,R.drawable.shanzhi,R.drawable.suolong};
ArrayList list=new ArrayList();
//循环来赋值数据
for(int i=0;i<names.length;i++){
//一个列表项组织成一个map对象
HashMap map=new HashMap();
map.put("images",images[i]);
map.put("names",names[i]);
//创建一个list
list.add(map);
}
//准备适配器,第二个参数list集合,其中元素map对象,第三个参数列表项布局
//第四个参数map中的数组,第五个参数控件的id,键和id一一对应
SimpleAdapter simpleAdapter=new SimpleAdapter(this,list,R.layout.item_list,
new String[]{"images","names"},new int[]{R.id.iv_icon,R.id.tv_name});
//给listview加适配器
listView.setAdapter(simpleAdapter);
三、自定义适配器(BaseAdapter)
1、Lufei.java
实体类
public class Lufei {
//成员变量
private String name;
private int image;
//getset方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getImage() {
return image;
}
public void setImage(int image) {
this.image = image;
}
//构造方法
public Lufei(String name, int image) {
this.name = name;
this.image = image;
}
}
2、MyAdapter
自定义适配器用来存储数据
//将数据放到列表项布局中
public class MyAdapter extends BaseAdapter {
//数据集合
private List<Lufei> data;
//列表项id
private int layout_id;
//上下文
private Context context;
//构造方法
public MyAdapter(Context context,List<Lufei> data, int layout_id) {
this.context=context;
this.data = data;
this.layout_id = layout_id;
}
//获得列表项的数量data.size()
@Override
public int getCount() {
return data.size();
}
//返回列表项对应的数据对象,获取position位置数据对象,集合中position位置元素
@Override
public Object getItem(int position) {
return data.get(position);
}
//当前元素的位置
@Override
public long getItemId(int position) {
return position;
}
//将一条数据放到列表项中,position位置数据
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//1.数据在哪里,list集合中data中拿,拿position位置数据
Lufei lufei=data.get(position);
int image=lufei.getImage();
String name=lufei.getName();
//2.将这两个数据放到控件上
//通过inflater对象将布局装为view对象,在通过view对象findViewById找到对象
LayoutInflater inflater=LayoutInflater.from(context);
View view=inflater.inflate(layout_id,null);
ImageView imageView=view.findViewById(R.id.iv_icon);
TextView textView=view.findViewById(R.id.tv_name);
//3.数据放到控件上
imageView.setImageResource(image);
textView.setText(name);
return view;
}
}
3、MainActivity.java
调用适配器完成存储
listView=findViewById(R.id.listview);
ArrayList list=new ArrayList();
list.add(new Lufei("路飞",R.drawable.lufei));
list.add(new Lufei("娜美",R.drawable.namei));
list.add(new Lufei("山治",R.drawable.shanzhi));
list.add(new Lufei("索隆",R.drawable.suolong));
MyAdapter myAdapter=new MyAdapter(this,list,R.layout.item_list);
listView.setAdapter(myAdapter);