概述:
(1)ListView:Android中显示列表的控件
(2)数据适配器: 向控件提供数据源,把复杂的数据填充在指定视图界面上,是连接数据源和视图界面的桥梁。
A. ArrayAdapter :绑定格式单一的数据,数据源可以是集合或数组。
B. SimpleAdapter:绑定格式复杂的数据,数据源只能是特定泛型的集合。
适配器的实现:新建适配器——>添加数据源到适配器——>视图加载适配器。
(I)新建适配器:ArrayAdapter(上下文,当前listView加载的每一个列表项所对应的布局文件,数据源);
SimpleAdapter(context,data,resource,from,to);
//context: 上下文,this
//data: 数据源(list<? extends Map<String,?>> data)一个Map所组成的List集合,如 List<Map<String,Object>> list;
每一个Map都对应ListView列表中的一行
每一个Map(键-值对)中的键必须包含所有在from中所指定的键
自定义一个函数,初始化list,如
private List<Map<String,Object>> getData()
{
for(int i=0;i<20;i++)
Map<String,Object> map=new HashMap<String,Object>();
map.put("PIC",R.drawable.图片名);
map.put("TEXT","慕课网"+i);
list.add(map);
}
return list;
}
//resource:列表项的布局文件ID,新建一个布局XML文件,布置每一项(行)的布局,相当于项的布局模板,如item.XML,则ID为R.layout.item
//from: Map中的键名,new String[]={"PIC","TEXT"};
//to: 绑定数据视图中的ID,与from成对应关系 ,item.XML中的ID。如new int[]{R.id.XXX,R.id.YYY}
(II)添加数据源到适配器
String[] arry_data={"慕课网1","www.imooc.com"};
arr_adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arry_data);
(III)视图加载适配器
listView.setAdapter(arr_adapter);
(3)监听器 ,程序和用户(或系统)交互的桥梁,每个监听器都是一个接口。
实现:让Activity类继承实现OnScrollListener、OnItemClickListener接口,并重写接口的方法,最后让listView加载这些监听器,即listView.setOnItemClickListener(this)、listView.setOnScrollListener(this);
A. OnScrollListener
public void onScrollStateChanged(**,int scrollState)
{
switch(scrollState)
{
case SCROLL_STATE_FLING: //手指离开前 用力滑动,依靠惯性滚动ListView,此时手指已离开屏幕
可以在滚动时做动态添加item项
Map<String,Object> map=new Map<String,Object>();
map.put("PIC",值);
map.put("TEXT",值);
list.add(map);
simp_adapter.notifyDataSetChanged();//通知UI主线程去更新,以适应数据源的变化。
break;
case SCROLL_STATE_IDLE: //ListView停止滑动
break;
case SCROLL_STATE_TOUCH_SCROLL: //ListView正在滑动,手指没有离开屏幕
break;
}
}
public void onScroll()
{
}
B. OnItemClickListener
void onItemClick(**,**,position,**)
{
String text=listView.getItemAtPosition(position);
Toast.makeText(this,内容,Toast.LENGTH_SHORT).show();
}
(4)刷新适配器数据
notifyDataSetChanged