1、数组适配器(ArrayAdapter):使用时直接new一个就好
ArrayAdapter adapter=new ArrayAdapter(this,R.layout.act_main_item,data);
第一个参数为当前activity,直接this就好;第二个参数为项资源文件,即layout文件夹中的文件;第三个参数为数据源。
2、简单适配器(SimpleAdapter):使用时直接new一个就好
SimpleAdapter adapter=new SimpleAdapter(this,data,R.layout.act_main_item,new String[]{"image","name"},new int[]{R.id.sp_main_item_img,R.id.tv_main_item_content});
第一个参数为当前activity,直接this就好;第二个参数为数据源;第三个参数为项资源文件,即layout文件夹中的文件;第三个参数为由数据源List<Map<String,Object>>中Map的键组成的String数组,第四个参数为由高级控件的ID组成的int数组。例如:
Book实体类代码:
public class Book {
private Integer id;
private String name;
private Integer image;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getImage() {
return image;
}
public void setImage(Integer image) {
this.image = image;
}
}
BookDao中的代码(用以提供数据源):
public class BookDAO {
public List<Book> list() {
List<Book> bookList = new ArrayList<Book>();
String[] names = {"愤怒的小鸟", "汤姆猫", "落汤鸡", "牛牛", "哈巴狗", "神龙", "烤鸭","小象", "美人鱼", "九尾狐"};
int[] images = {R.drawable.bird, R.drawable.cat, R.drawable.chicken,
R.drawable.cow, R.drawable.dog, R.drawable.dragon,
R.drawable.duck, R.drawable.elephant, R.drawable.fish,
R.drawable.fox};
Book b = null;
for (int i = 0; i < names.length; i++) {
b = new Book();
b.setId(i + 1);
b.setName(names[i]);
b.setImage(images[i]);
bookList.add(b);
}
return bookList;
}
}
注:int数组images为drawable里的图片
act_main_item2.xml里的代码(项资源文件):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="80dp"
android:orientation="horizontal">
<ImageView
android:layout_width="80dp"
android:id="@+id/sp_main_item_img"
android:layout_height="match_parent" />
<TextView
android:layout_width="match_parent"
android:id="@+id/tv_main_item_content"
android:layout_height="match_parent" />
</LinearLayout>
MainActivity里的代码:
public class MainActivity extends AppCompatActivity {
private Spinner sp_main_select2;
private SimpleAdapter adapter3;
private List<Map<String,Object>> data3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
data3=loadData3();
adapter3=new SimpleAdapter(this,data3,R.layout.act_main_item2 ,new String[]{"image","name"},new int[]{R.id.sp_main_item_img,R.id.tv_main_item_content});
sp_main_select2.setAdapter(adapter3);
}
private List<Map<String,Object>> loadData3() {
List<Book> books = new BookDAO().list();
List<Map<String,Object>> maps=new ArrayList<>();
for (Book book : books) {
Map<String,Object> map=new HashMap<>();
map.put("image",book.getImage());
map.put("name",book.getName());
maps.add(map);
}
return maps;
}
}
3、自定义适配器:BaseAdapter是所有适配器类的父类,所以自定义适配器时要写一个类继承BaseAdapter,然后实现四个方法,四个方法的解析如下图: