使用ListView显示信息列表
2016-05-24 13:18
267 查看
ArrayAdapter(数组适配器):用于绑定格式单一的数据
数据源:可以是集合或数组
SimpleAdapter(简单适配器):用于绑定格式复杂的数据
数据源:只能是特定泛型的集合
1.新建适配器
2.添加数据源到适配器
3.视图加载适配器
适配器是数据源与视图交互的桥梁
监听器
OnItemClickListener:可以处理视图中单个条目的点击事件
OnScrollListener:监测滚动的变化,可以用于视图在滚动中加载数据
监听器是程序和用户(或系统)交互的桥梁
public class MainActivity extends Activity implements OnItemClickListener, OnScrollListener{
private ListView listView;
private ArrayAdapter<String> arr_adapter;
private SimpleAdapter simp_adapter;
private List<Map<String, Object>> dataList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = (ListView) findViewById(R.id.listView);
//1.新建一个数据适配器
//ArrayAdapter(上下文, 当前ListView加载的每一个列表项所对应的布局文件, 数据源)
//SimpleAdapter()
/**
* context:上下文
* data:数据源 List<? extends Map<String, ?>> data 一个Map所组成的List集合
* 每一个Map都会去对应ListView列表中的一行
* 每一个Map(键-值对)中的键必须包含所有在from中所指定的键
* resource:列表项的布局文件ID
* from:Map中的键名
* to:绑定数据视图中的ID,与from成对应关系
*/
//2.适配器加载数据源
String[] arr_data = {"1", "2", "3", "4"};
dataList = new ArrayList<Map<String, Object>>();
arr_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arr_data);
simp_adapter = new SimpleAdapter(this, getData(), R.layout.item, new String[]{"pic", "text"}, new int[]{R.id.pic, R.id.text});
//3.视图(ListView)加载适配器
// listView.setAdapter(arr_adapter);
listView.setAdapter(simp_adapter);
listView.setOnItemClickListener(this);
listView.setOnScrollListener(this);
}
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", i + "");
dataList.add(map);
}
return dataList;
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
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 SCROLL_STATE_TOUCH_SCROLL:
Log.i("Main", "手指没有离开屏幕,视图正在滑动");
break;
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
String text = listView.getItemAtPosition(position) + "";
Toast.makeText(this, "position = " + position + ", text = " + text, Toast.LENGTH_SHORT).show();
}
}
数据源:可以是集合或数组
SimpleAdapter(简单适配器):用于绑定格式复杂的数据
数据源:只能是特定泛型的集合
1.新建适配器
2.添加数据源到适配器
3.视图加载适配器
适配器是数据源与视图交互的桥梁
监听器
OnItemClickListener:可以处理视图中单个条目的点击事件
OnScrollListener:监测滚动的变化,可以用于视图在滚动中加载数据
监听器是程序和用户(或系统)交互的桥梁
public class MainActivity extends Activity implements OnItemClickListener, OnScrollListener{
private ListView listView;
private ArrayAdapter<String> arr_adapter;
private SimpleAdapter simp_adapter;
private List<Map<String, Object>> dataList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = (ListView) findViewById(R.id.listView);
//1.新建一个数据适配器
//ArrayAdapter(上下文, 当前ListView加载的每一个列表项所对应的布局文件, 数据源)
//SimpleAdapter()
/**
* context:上下文
* data:数据源 List<? extends Map<String, ?>> data 一个Map所组成的List集合
* 每一个Map都会去对应ListView列表中的一行
* 每一个Map(键-值对)中的键必须包含所有在from中所指定的键
* resource:列表项的布局文件ID
* from:Map中的键名
* to:绑定数据视图中的ID,与from成对应关系
*/
//2.适配器加载数据源
String[] arr_data = {"1", "2", "3", "4"};
dataList = new ArrayList<Map<String, Object>>();
arr_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arr_data);
simp_adapter = new SimpleAdapter(this, getData(), R.layout.item, new String[]{"pic", "text"}, new int[]{R.id.pic, R.id.text});
//3.视图(ListView)加载适配器
// listView.setAdapter(arr_adapter);
listView.setAdapter(simp_adapter);
listView.setOnItemClickListener(this);
listView.setOnScrollListener(this);
}
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", i + "");
dataList.add(map);
}
return dataList;
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
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 SCROLL_STATE_TOUCH_SCROLL:
Log.i("Main", "手指没有离开屏幕,视图正在滑动");
break;
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
String text = listView.getItemAtPosition(position) + "";
Toast.makeText(this, "position = " + position + ", text = " + text, Toast.LENGTH_SHORT).show();
}
}
相关文章推荐
- Map 篇
- 黑马程序员认为:iOS开发者的春天即将到来
- List 篇
- Android 网络通信框架Volley简介
- POJ 1064 Cable master (二分答案)
- mysql5.6.30之count(*)详解
- SQL语言的分类及表格数据的基本操作
- Linux下openoffice安装以及启动服务
- Ehcache 缓存组件
- Codefroces #353(Div.2) Tree Construction
- [从头学数学] 第219节 带着计算机去高考(十一)
- PHP之——phpstorm Can't use Subversion command line client: svn.
- 第八周 项目2-用对象数组操作长方柱类
- shell脚本循环的意义和概念
- 中位中心栅格遍历法
- Jacoco Maven Plugin - Plugin execution not covered by lifecycle configuration
- Java设计模式之------值对象模式
- Linux文件权限详解
- 【Arduino官方教程第一辑】示例程序 5-2 For循环迭代(霹雳游侠)
- 黑马程序员再添高端学科,重磅推出C/C++课程