存放数据的一个容器,显示在activity 上的。
1)只有通过Adapter 才可以把列表中的数据映射到ListView 中。
2)种类:
ArrayAdapter,
BaseAdapter,
CursorAdapter ,
HeaderViewAdapter,
ResourceCursorAdapter,
SimpleAdapter,
SimpleCursorAdapter,
WrapperListAdapter
3)常用的三个:
ArrayAdapter SimpleAdapter BaseAdapter
1)使用ArrayAdapter 可以实现简单的ListView 的数据绑定。
2)默认情况下,ArrayAdapter绑定每个对象的toString值 到layout 中 预先定义的TextView 控件上。
3)在xml 文件,添加layout 组件
4) 主程序代码:
package com.example.lum.arrayadapterlistview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends AppCompatActivity {
private ListView mListView;
//字符串组合
private String [] data = {"item_One","item_Two","item_Three","item_Four",
"item_Five","item_Six","item_Seven","item_Eight","item_Nine","item_Ten"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找到listview 组件
mListView = (ListView) findViewById(R.id.lv_id);
/**
* 通过ArrayAdapter 将数据和布局联系起来
* 参数1 当前上下文环境
* 参数2 当前引用的布局 一般系统默认
* 参数3 当前绑定的数据
* */
ArrayAdapter array = new ArrayAdapter(
this,android.R.layout.simple_list_item_1,data);
//将数据和布局 显示到列表
mListView.setAdapter(array);
}
}
1)根据需要定义ListView 每个Item 所想要的布局
2)定义一个HashMap 构成的列表,将数据以 键值对的方式保存到里面
3)构造list 列表 ,存放 hashMap
4)构造 SimpleAdapter
5)将ListView绑定到 SimpleAdapter 上
package com.example.lum.arrayadapterlistview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private ListView mListView;
//字符串组合
private String [] data = {"item_One","item_Two","item_Three","item_Four",
"item_Five","item_Six","item_Seven","item_Eight","item_Nine","item_Ten"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找到listview 组件
mListView = (ListView) findViewById(R.id.lv_id);
//创建一个含有hanshMap 的列表集合
List> data = new ArrayList<>();
for(int i = 1; i <=18; i++) { //创建 18 个 map 数据对象 ,每个map 对象 有两个键值数据
//创建HashMap 对象,添加键值数据
HashMap map = new HashMap<>();
//向map 对象添加两组键值对数据
map.put("key_one","dataOne_" + i);
map.put("key_two","dataTwo_" + i);
//将 map 对象添加到data 集合
data.add(map);
}
/**
* SimpleAdapter 将数据和布局联系起来
* 参数1 当前上下文环境
* 参数2 当前绑定的数据
* 参数3 当前引用的listView 的列表的布局
* 参数4 String数组存储的map 的key
* 参数5 int 数组保存的 组件的id
*
* 参数4 ,参数5 值是对应关系
* */
SimpleAdapter mSimpleAdapter = new SimpleAdapter(
this,
data,
R.layout.listview_item,
new String[]{"key_one","key_two"},
new int[]{R.id.text_one,R.id.text_two});
//将数据通过适配器显示到lv
mListView.setAdapter(mSimpleAdapter);
}
}
1)BaseAdapter 是开发中最常用的适配 ArrayAdapter, SimpleAdapter 都继承于BaseAdapter.
2)继承BaseAdapter之后,需要重写以下四个方法:getCount,getItem,getItemId,getView。
3)首先 getCount() 获取Item 的个数。
4) 每绘制一次就调用一次getView() 方法,在getView 中将事先定义好的layout布局确定显示的效果并返回一个View对象作为一个Item 显示出来。
5)getItem() getItemId() 调用ListView 的响应的方法的时候调用到。
7)创建一个类 StudentData 用来方便实例化学生信息
package com.example.lum.arrayadapterlistview;
/**
* Created by lum on 2018/5/27.
*/
public class StudentData {
private String name; //定义学生的姓名
private int age; //定义学生的年龄
private int photo; //定义学生的照片
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setPhoto(int photo) {
this.photo = photo;
}
public int getPhoto() {
return photo;
}
}
8)自定义适配器继承 BaseAdapter
package com.example.lum.arrayadapterlistview;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
/**
* Created by lum on 2018/5/27.
*/
public class MyListAdapter extends BaseAdapter {
private List mStudentDataList; //创建一个StudentData 类的对象 集合
private LayoutInflater inflater;
public MyListAdapter (List mStudentDataList, Context context) {
this.mStudentDataList = mStudentDataList;
this.inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return mStudentDataList == null?0:mStudentDataList.size(); //判断有说个Item
}
@Override
public Object getItem(int position) {
return mStudentDataList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//加载布局为一个视图
View view = inflater.inflate(R.layout.listview_item,null);
StudentData mStudentData = (StudentData) getItem(position);
//在view 视图中查找 组件
TextView tv_name = (TextView) view.findViewById(R.id.text_name);
TextView tv_age = (TextView) view.findViewById(R.id.text_age);
ImageView im_photo = (ImageView) view.findViewById(R.id.phone_id);
//为Item 里面的组件设置相应的数据
tv_name.setText(mStudentData.getName());
tv_age.setText("age: "+ mStudentData.getAge());
im_photo.setImageResource(mStudentData.getPhoto());
//返回含有数据的view
return view;
}
}
9)主函数实现数据初始化 listView 显示
package com.example.lum.arrayadapterlistview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private ListView mListView;
//字符串组合
private String [] data = {"item_One","item_Two","item_Three","item_Four",
"item_Five","item_Six","item_Seven","item_Eight","item_Nine","item_Ten"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找到listview 组件
mListView = (ListView) findViewById(R.id.lv_id);
List mStudentDataList = new ArrayList<>(); //创建studentData 对象集合
for( int i = 1; i <= 18 ; i++) {
StudentData mStudentData = new StudentData(); //循环创建studentData 对象
mStudentData.setName("lum " + i + " 号"); //为对象设置姓名
mStudentData.setAge(i); //为对象设置 年龄
mStudentData.setPhoto(R.drawable.lum); //为对象设置照片
mStudentDataList.add(mStudentData); //将对象添加到列表中
}
//创建Adapter 实例化对象, 调用构造函数传参,将数据和adapter 绑定
MyListAdapter mMyListAdapter = new MyListAdapter(mStudentDataList,this);
mListView.setAdapter(mMyListAdapter); //将定义的adapter 和 listView 绑定
}
}
####主要思路:
1)通过想要显示的列表样式,选择合适的 item ,或自定义 item
2)通过合适的adapter 将想要显示的数据 和Item 对应绑定
3)通过setadapter()将 相应的adapter 和 listView 绑定在一起 ,实现显示
demon 参考下载:
listView adapter