一:ListView 介绍
ListView:是以列表的方式显示数据的组件特点:每一个列表项独占一行,每行的布局都相同,数据和布局分离,数据来自适配器
1.ArrayAdapter类
数组适配器类,该类负责将数组指定布局方式显示,通过与listview等控件相关联,在列表类型的控件中按指定布局样式显示数组中的数据public ArrayAdapter(Context context, int textViewResourceId, T[] objects)
第一个参数:上下文对象,当前窗口对象
第二个参数:标签控件的资源索引值
第三个参数:数组对象
2.常用方法 Object getItemAtPosition(int position)
获取当前列表项3.onItemClick接口
ListView的单击事件,当用户按下列表选项触发的是单击事件public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
}
第一个参数:当前列表对象,如ListView对象
第二个参数:view,被单击的列表项对象,如TextView
第三个参数:i,被单击的列表项在列表中所处的行的索引值
----------------------------------------------------------
1)数据源
private String[] days = {"星期一","星期二","星期三","星期四",
"星期五","星期六","星期天"};
lv = (ListView)findViewById(R.id.listview);
2)setAdapter与listview绑在一起
lv.setAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,//布局文件
days));//源数据的字符串数组
3)监听listview的选取事件
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String tv = (String)lv.getItemAtPosition(i);
Log.i("xxx",tv);
}
});
二:ListView 常用的Adapter
Adapter:是连接数据与显示View的适配器接口,是数据与UI的纽带1)ArrayAdapter 支持泛型操作,只能展示一行字
lv.setAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,//列表每一行的布局,只显示一行文字
days));//数据源,是一个字符串数组
使用了ArrayAdapter来装配数据,效果如下
2)SimpleAdapter 可以自定义各种效果
例:带图片的ListView
左边显示图片,在图片的右边显示文字
用Map(String,Object> item来保存列表中每一项需要显示的图片和文字
在用SimpleAdpater将map数据写入自定义的布局,就可以显示列表了
-------------------------------------------------------------
SimpleAdapter的数据一般都是HashMap构成的ArrayList, list的每一节对应listView的每一行
HashMap的每个键值映射到布局文件中对应的id上
SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
参数:
1,context:上下文。
2,data:基于Map的list。Data里边的每一项都和 ListView里边的每一项对应。Data里边的每一项都是一个Map类型,这个Map类里边包含了ListView每一行需要的数据。
3,resource :就是一个布局layout,可引用系统提供的,也可以自定义,如cat.xml
4,from:这是个名字数组,每个名字是为了在 ArrayList数组的每一个item索引Map<String,Object>的Object用的。即 map 中得key值
5,to:里面是一个资源数组。这些资源是以id的形式来表示的。例如:R.id.image, R.id.title
a)自定义布局cat.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/image"
android:layout_width="100dip"
android:layout_height="100dip"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
app:srcCompat="@mipmap/cat1" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/image"
android:layout_marginBottom="23dp"
android:textSize="30dip"
android:layout_toEndOf="@+id/image"
android:text="TextView" />
</RelativeLayout>
b)代码直接继承ListActivity,方便显示
public class SimpleAdapterActivity extends android.app.ListActivity {
private int[] image = {
R.mipmap.cat1,
R.mipmap.cat2,
R.mipmap.cat3,
R.mipmap.cat4,
R.mipmap.cat5,
};
private String[] title = {"猫大","猫二","猫三","猫四","猫五"};
ArrayList<Map<String,Object>> mData = new ArrayList<Map<String,Object>>();
private ListView lv = null;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
lv = getListView();
//1)填冲Map获取数据
for(int i=0; i<title.length;i++){
Map<String,Object> item = new HashMap<String,Object>();
item.put("image",image[i]);
item.put("title",title[i]);
mData.add(item);
}
//2)adapter 绑定数据和View
SimpleAdapter adapter = new SimpleAdapter(this,
mData,
R.layout.cat,
new String[]{"image","title"},
new int[]{R.id.image, R.id.title});
//3)设置adapter,将cat布局显示到listView当中
lv.setAdapter(adapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(SimpleAdapterActivity.this,
"你选中了"+title[i],
Toast.LENGTH_LONG).show();
}
});
}
}
3)BaseAdapter
参考:http://www.xuanyusong.com/archives/91
:http://blog.csdn.net/harvic880925/article/details/17258789