学习目标:
1.理解 ListView 的基础使用
2.学会熟练运用两种适配器( ArrayAdapter SimpleAdapter )
3.学会熟练运用两种监听器( OnScrollListener OnItemClickListener )
4.学会熟练运用适配器数据的刷新( notifyDataChanged )
数据适配器
http://www.imooc.com/video/1618
摘自 TowerRush
作用:把数据填充在指定视图界面上
ArrayAdapter:用于绑定格式单一数据
数据源:集合或者数组
SimpleAdapter:用于绑定格式复杂的数据
数据源:只能是特定泛型的集合
数据适配器是连接数据源和视图界面的桥梁
实现过程:新建适配器->添加数据源到适配器->视图加载适配器
ArrayAdapter
http://www.imooc.com/video/1620
摘自 locker
(ArrayAdapter)数据适配器的实现过程:
1.新建适配器
arr_adapter=new ArrayAdapter(上下文(this),当前ListView加载的每一个列表项所对应的布局文件(android.R.layout.simple_list_item_1),数据源(String[]arr_data={“1”,”2”,”3”,”4”}));
2.添加数据源到适配器(上一步已包含)
3.视图(ListView)加载适配器
listView.setAdapter(arr_adapter);
SimpleAdapter
http://www.imooc.com/video/1621
摘自 locker
(SimpleAdapter)数据适配器的实现过程:
1.新建适配器
simp_adapter=new SimpleAdapter(context,data,resource,from,to);
context:上下文(this)
data:有特定泛型的集合数据源–一个Map所组成的List集合
(新建自定义List
并通过方法返回在此处—详见笔记附录1)
<每一个Map都会去对应列表中的一行
每一个Map中的键必须包含所有在from中所指定的键>
resource:列表项的布局文件(自定义布局)
from:记录Map中的键名(new String[]{布局文件的name})
to:绑定数据视图中的ID,与from成对应关系(new int[]{布局文件中ID})
2.添加数据源到适配器(上一步已包含)
3.视图(ListView)加载适配器
listView.setAdapter(simp_adapter);
笔记附录:
1.返回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.ic_launcher);
map.put("text","BUPT NO."+i);
dataList.add(map);
}
return dataList;
}
ListView—- 监听器
http://www.imooc.com/video/1622
http://www.imooc.com/video/1623
摘自 i红姬
1、监听ListView列表项点击事件:onItemClick
2、监听ListView滚动事件,onScrollChangedListener
SCROLL_STATE_FLING -> 用户在手指离开屏幕之前,由于用力划了一下,视图任然依靠惯性,继续划了一段距离。
SCROLL_STATE_IDLE -> 视图已经停止滑动。
SCROLL_STATE_TOUCH_SCROLL -> 手指没有离开屏幕,手指正带着屏幕滑动。
如果要动态修改数据,那么需要adapter.notifyDataSetChanged();如果修改了数据,而没有通知listview刷新,那么将会出错。
实现过程:
摘自 Mr_Yuanxiansheng
String text=listView.getItemAtPosition(position)+"";
Toast.makeText(<上下文>this,<打印内容>"position"+position+" text="+text,
<打印时长>Toast.LENGTH_SHORT.show());
事件监听器(OnScrollListener):监听滚动时加载数据的事件
实现过程:
1. Activity中加入接口 OnScrollListener
2. 使用ListView加载listView.setOnScrollListener(this);
3. 修改onScrollStateChanged
方法
switch(scrollState){
case SCROLL_STATE_FLING:
Log.i("Main","用户在手指离开屏幕之前,由于用力滑了一下,视图仍依靠惯性继续滑动");
Map<String,Object>map=new HashMap<String,Object>();
map.put("pic",R.drawable.ic_launcher);
map.put("text","增加项");
dataList.add(map);
simp_adapter.notifyDataSetChanged();//刷新
break;
case.SCROLL_STATE_IDLE:
Log.i("Main","视图已经停止滑动");
break;
case:
Log.i("Main","手指没有离开屏幕,视图正在滑动");
break;
}
笔记附录:
1.Toast.makeText.show方法:在屏幕下方弹出提示内容(并非窗口)
摘自 慕粉3595949
Toast.makeText(this, "string string string",Toast.LENGTH_LONG).show();
这句的意思:
Toast
:是一个类,主要管理消息的提示。
makeText()
,是Toast的一个方法,用来显示信息,分别有三个参数。
第一个参数:this,是上下文参数,指当前页面显示
第二个参数:“string string string ”是你想要显示的内容,也可以是“你好!”。这个是随便定义的,显示你想要显示的内容。
第三个参数:Toast.LENGTH_LONG
,是你指你提示消息,显示的时间,这个是稍微长点儿,对应的另一个是Toast.LENGTH_SHORT
,这个时间短点儿,大概2秒钟。
show()
,表示显示这个Toast消息提醒,当程序运行到这里的时候,就会显示出来,如果不调用show()
方法,这个Toast对象存在,但是并不会显示,所以一定不要忘记。
总结
(1)SimpleAdapter的构造方法中参数较多,写的时候不要着急,要对应好的布局文件中的id
(2)监听器和适配器是通用于很多android控件上,不局限于ListView
(3)本课案例通过onScrollListener监听了用户手指滑动的动作,实际上我们常见的列表下拉刷新就是依此扩展的。
(4)熟练运用notifyDatasetchanged,它可以动态更新视图中所包含的数据。