一,课程目标
1,理解ListView的基础使用
2,学会熟练运用两种适配器
(ArrayAdapter, SimpleAdapter)
3, 学会熟练运用两种监听器
(OnScrollListener, OnIntemClickListener)
4, 学会熟练运用适配器数据的刷新
(notifyDataChanged)
二,ListView
1,ListView的作用: android系统中显示列表的控件;
2,ListView 控件:每一个ListView都可以包含很多个列表项
三,数据适配器
数据适配器的作用:把复杂的数据(数组、链表、集合、数据库等)填充在指定视图界面上;
ArrayAdapter(数据适配器):用于绑定格式单一的数据
数据源:可以是集合或数组
SimpleAdapter(简单适配器):用于绑定格式复杂的数据
数据源:只能是特定泛型的集合
数据适配器是连接数据源和视图界面的桥梁;
四,实例:
private ListView listView;
private ArrayAdapter<String> arr_adapter;
private SimpleAdapter simp_adapter;
listView =(ListView)findViewById(R.id.listview);
//1,新建一个数据适配器
ArrayAdapter(上下文,当前ListView加载的每一个列表所对应的布 局文件,数据源)
系
//2,适配器加载数据源
String[] arr_data={"慕课网1","慕课网2","慕课网3","慕课网4"};
arr_adapter=new ArrayAdapter<string>(this,android.R.layout.simple_list_item_1,arr_data);
//3,视图(ListView)加载适配器
listView.setAdapter(arr_adapter);
SimpleAdapter(context,data,resource,from,to)
context:上下文
data:数据源
数据源List<? extends Map<String,?>> data
一个Map所组成的List集合
每一个Map都会对应ListView中的一行
每一个Map(键--值对)中的键必须包含所有在from中所指定的值
resource:列表项的布局文件ID
from:Map中的键名
to:绑定数据视图中的ID,与from成对应关系
四,监听器
作用:android提供了很多事件监听器,监听器主要是为了响应某个动作,
这个动作可以是用户操作的,也可以是android系统本身发出的。
我们可以通过监控这个动作飞行为,来完成我们需要的程序功能;
OnItemClickListener:
可以处理视图中单个条目的点击事件;
OnScrollListener:
监听滚动的变化,可以用于视图在滚动中加载数据;
监听器是程序和用户(或系统)交互的桥梁;
五,onItemClick(AdapterView<?> parent ,View view, int position ,long id)详解
public void onItemClick (AdapterView<?> parent, View view,int position,long id)
-
假设有X, Y两个listview,
-
X里有1,2,3,4这4个item,
-
Y里有a,b,c,d这4个item。
如果你点了b这个item。则有如下:public void onItemClick (AdapterView<?> parent, View view,int position,long id)
// parent相当于listview Y适配器的一个指针,可以通过它来获得Y里装着的一切东西,再通俗点就是说告诉你,你点的是Y,不是X
View view,
// view是你点b item的view的句柄,就是你可以用这个view,来获得b里的控件的id后操作控件
int position,
// position是b在Y适配器里的位置(生成listview时,适配器一个一个的做item,然后把他们按顺序排好队,在放到listview里,
意思就是这个b是第position号做好的)
long id
// id是b在listview Y里的第几行的位置(很明显是第2行),大部分时候position和id的值是一样的,- 如果需要的话,你可以自己加个log把position和id都弄出来在logcat里瞅瞅,看了之后心里才踏实)
PS:需要注意区分position与long id的区别。position事实上就是ListView中被点击的view的位置,
注意,在ListView中是不负责处理headerView和footViewer的,
所以,这个位置position应该是这个被点击的view在数组[所有的headerView,用户添加的view,所有的footerView]中的位置,
而id是来自于adapter.getItemId(position)。当用户添加了footView或者headView后可能会导致position和id的值不同。
事实上,如果position指向了headerView或footerView,那么返回-1,否则,将返回在用户view数组的位置。
也就是说id=position-headerView的个数(id < headerviewer的个数+用户view的个数),否则返回-1。
- 如果需要的话,你可以自己加个log把position和id都弄出来在logcat里瞅瞅,看了之后心里才踏实)
网友评论