使用ListView显示信息列表,用监听器和适配器,操作

2014-08-18

数据适配器: 是连接数据源和视图界面的桥梁

1、数组适配器(ArrayAdapter):用于绑定格式单一的数据

  数据源:可以是集合或数组

2、简单适配器(SimpleAdapter):用于绑定格式复杂的数据

  数据源:只能是特定泛型的集合

监听器: 程序和用户(或系统)交互的桥梁

OnScrollListener: 检测滚动的变化,可以用于视图在滚动中加载数据

OnItemClickListener: 用于处理视图中单个条目的点击事件

适配器数据的刷新

notifyDataChanged

数组适配器(ArrayAdapter)

1     <ListView
2         android:id="@+id/listView1"
3         android:layout_width="match_parent"
4         android:layout_height="wrap_content"
5         android:layout_alignParentLeft="true"
6         android:layout_alignParentTop="true" >
7     </ListView>

ListView XML文件

 1 public class MainActivity extends ActionBarActivity {
 2     private ListView listView;
 3     ArrayAdapter<String> arr_adapter;
 4
 5     @Override
 6     protected void onCreate(Bundle savedInstanceState) {
 7         super.onCreate(savedInstanceState);
 8         setContentView(R.layout.fragment_main);
 9
10         listView=(ListView) findViewById(R.id.listView1);
11         /*     1、新建一个数据适配器
12                 ArrayAdapter<>(上下文,加载所对应的布局文件,数据源)
13             2、适配器加载数据源        */
14         String[] arr_data = {
15                 "星期1","星期2","星期3","星期4",
16                 "星期5","星期6","星期7"
17         };
18         arr_adapter=new ArrayAdapter<String>(MainActivity.this,
19                 android.R.layout.simple_list_item_1, arr_data);
20         //3、视图(ListView)加载适配器
21         listView.setAdapter(arr_adapter);
22     }
23 }

数组适配器:Java文件

简单适配器(SimpleAdapter)

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="horizontal" >
 6
 7     <ImageView
 8         android:id="@+id/pic"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:layout_marginLeft="15dp"
12         android:src="@drawable/ic_launcher"
13     />
14
15     <TextView
16         android:id="@+id/text"
17         android:layout_width="wrap_content"
18         android:layout_height="wrap_content"
19         android:layout_marginLeft="15dp"
20         android:textSize="20sp"
21         android:textColor="#000000"
22         android:text="demo"
23         />
24
25 </LinearLayout>

新建一页XML文件布局

 1 public class MainActivity extends ActionBarActivity {
 2     private ListView listView;
 3     private SimpleAdapter simp_adapter;
 4     private List<Map<String, Object>> dataList;
 5
 6     @Override
 7     protected void onCreate(Bundle savedInstanceState) {
 8         super.onCreate(savedInstanceState);
 9         setContentView(R.layout.fragment_main);
10
11         /**
12          * new SimpleAdapter(context, data, resource, from, to)
13          * @context:上下文
14          * @data: 数据源(List<? extends Map<String, ?>> data),
15          *                 一个Map所组成的List集合
16          *                 每一个Map都会去对应ListView列表中的一行
17          *                 每个Map(键-值对) 中的键必须包含在所有在from中所指定的键
18          * @resource: 列表项的布局文件ID
19          * @from: Map中的键名
20          * to: 绑定数据视图中的ID,与from成对应关系
21          */
22         listView = (ListView) findViewById(R.id.listView1);
23         dataList = new ArrayList<Map<String, Object>>();
24
25         simp_adapter=new SimpleAdapter(this, getData(), R.layout.item
26                 ,new String[]{"pic","text"}, new int[]{R.id.pic,R.id.text});
27
28         listView.setAdapter(simp_adapter);
29     }
30
31     private List<Map<String, Object>> getData(){
32         for (int i = 0; i < 20; i++) {
33             Map<String,Object> map = new HashMap<String,Object>();
34             map.put("pic",R.drawable.ic_launcher);
35             map.put("text", "demo"+i);
36             dataList.add(map);
37         }
38
39         return dataList;
40     }

SimpleAdapter简单适配器JAVA代码

//添加监听事件,点击后出现吐司,返回位置信息

 1 public class MainActivity extends ActionBarActivity implements OnScrollListener,OnItemClickListener{
 2     private ListView listView;
 3     private SimpleAdapter simp_adapter;
 4     private List<Map<String, Object>> dataList;
 5
 6     @Override
 7     protected void onCreate(Bundle savedInstanceState) {
 8         super.onCreate(savedInstanceState);
 9         setContentView(R.layout.fragment_main);
10
11         /**
12          * new SimpleAdapter(context, data, resource, from, to)
13          * @context:上下文
14          * @data: 数据源(List<? extends Map<String, ?>> data),
15          *                 一个Map所组成的List集合
16          *                 每一个Map都会去对应ListView列表中的一行
17          *                 每个Map(键-值对) 中的键必须包含在所有在from中所指定的键
18          * @resource: 列表项的布局文件ID
19          * @from: Map中的键名
20          * @to: 绑定数据视图中的ID,与from成对应关系
21          */
22         listView = (ListView) findViewById(R.id.listView1);
23         dataList = new ArrayList<Map<String, Object>>();
24
25         simp_adapter=new SimpleAdapter(this, getData(), R.layout.item
26                 ,new String[]{"pic","text"}, new int[]{R.id.pic,R.id.text});
27
28         listView.setAdapter(simp_adapter);
29
30         //加载事件监听器
31         listView.setOnItemClickListener(this);
32         listView.setOnScrollListener(this);
33     }
34
35     private List<Map<String, Object>> getData(){
36         for (int i = 0; i < 20; i++) {
37             Map<String,Object> map = new HashMap<String,Object>();
38             map.put("pic",R.drawable.ic_launcher);
39             map.put("text", "demo"+i);
40             dataList.add(map);
41         }
42
43         return dataList;
44     }
45
46     //需求:点击项,返回位置,内容, 吐司,
47     @Override
48     public void onItemClick(AdapterView<?> parent, View view, int position,
49             long id) {
50         // TODO 自动生成的方法存根
51         String text = listView.getItemAtPosition(position)+"";
52         Toast.makeText(this, "position="+position+" text="+text, Toast.LENGTH_LONG).show();
53
54     }
55
56     @Override
57     public void onScrollStateChanged(AbsListView view, int scrollState) {
58         // TODO 自动生成的方法存根
59
60     }
61
62     @Override
63     public void onScroll(AbsListView view, int firstVisibleItem,
64             int visibleItemCount, int totalItemCount) {
65         // TODO 自动生成的方法存根
66     }
67 }

在SimpleAdapter简单适配器的基础上添加监听事件

在上面的基础上添加监听滚动事件,在Log上输出滚动状态

在快速滑动时添加项目

 1 public class MainActivity extends ActionBarActivity implements OnScrollListener,OnItemClickListener{
 2     private ListView listView;
 3     private SimpleAdapter simp_adapter;
 4     private List<Map<String, Object>> dataList;
 5
 6     @Override
 7     protected void onCreate(Bundle savedInstanceState) {
 8         super.onCreate(savedInstanceState);
 9         setContentView(R.layout.fragment_main);
10
11         /**
12          * new SimpleAdapter(context, data, resource, from, to)
13          * @context:上下文
14          * @data: 数据源(List<? extends Map<String, ?>> data),
15          *                 一个Map所组成的List集合
16          *                 每一个Map都会去对应ListView列表中的一行
17          *                 每个Map(键-值对) 中的键必须包含在所有在from中所指定的键
18          * @resource: 列表项的布局文件ID
19          * @from: Map中的键名
20          * @to: 绑定数据视图中的ID,与from成对应关系
21          */
22         listView = (ListView) findViewById(R.id.listView1);
23         dataList = new ArrayList<Map<String, Object>>();
24
25         simp_adapter=new SimpleAdapter(this, getData(), R.layout.item
26                 ,new String[]{"pic","text"}, new int[]{R.id.pic,R.id.text});
27
28         listView.setAdapter(simp_adapter);
29
30         //加载事件监听器
31         listView.setOnItemClickListener(this);
32         listView.setOnScrollListener(this);
33     }
34
35     private List<Map<String, Object>> getData(){
36         for (int i = 0; i < 20; i++) {
37             Map<String,Object> map = new HashMap<String,Object>();
38             map.put("pic",R.drawable.ic_launcher);
39             map.put("text", "demo"+i);
40             dataList.add(map);
41         }
42
43         return dataList;
44     }
45
46     //需求:点击项,返回位置,内容, 吐司,
47     @Override
48     public void onItemClick(AdapterView<?> parent, View view, int position,
49             long id) {
50         // TODO 自动生成的方法存根
51         String text = listView.getItemAtPosition(position)+"";
52         Toast.makeText(this, "position="+position+" text="+text, Toast.LENGTH_LONG).show();
53
54     }
55
56     //手指在列表中滑动,滑动到底部,自动增加项目
57     @Override
58     public void onScrollStateChanged(AbsListView view, int scrollState) {
59         // TODO 自动生成的方法存根
60         switch(scrollState){
61         case SCROLL_STATE_FLING:
62             Log.i("Main","用户手指用力滑了一下,之后离开屏幕");
63             Map<String, Object> map = new HashMap<String, Object>();
64             map.put("pic", R.drawable.ic_launcher);
65             map.put("text", "增加项");
66             dataList.add(map);
67             //控制UI线程刷新界面
68             simp_adapter.notifyDataSetChanged();
69             break;
70         case SCROLL_STATE_IDLE:
71             Log.i("Main", "视图停止滑动");
72             break;
73         case SCROLL_STATE_TOUCH_SCROLL:
74             Log.i("main", "手指未离开屏幕,视图正在滑动");
75             break;
76         }
77     }
78
79     @Override
80     public void onScroll(AbsListView view, int firstVisibleItem,
81             int visibleItemCount, int totalItemCount) {
82         // TODO 自动生成的方法存根
83     }
84 }

监听滚动事件

使用ListView显示信息列表,用监听器和适配器,操作

时间: 2024-10-28 19:21:41

使用ListView显示信息列表,用监听器和适配器,操作的相关文章

Android实现ListView显示信息,点击每个item,跳转到相应界面

界面如下:(做这个目的仅仅是为了学习一点小知识,因为自己才刚开始) 实现的方法比较简单,就是定义一个ListView,然后设置监听,ListView对每个条目的监听是setOnItemClickListener. onItemClick(AdapterView<?> parent, View view, int position, long id) 这段代码中, parent           发生点击动作的AdapterView. view              在AdapterVie

Winform中ListView鼠标移动使用toolTip显示信息

今天在做一个酒店管理系统的时候用到了ListView,突然想到是否能够当鼠标移动到某一项的时候给出具体房间的信息呢! 首先设置Listview的MouseMove事件 1.获取当前坐标的项 ListViewItem lvi = this.listView.GetItemAt(e.X, e.Y); 2.判断是否有选中的项,如果有即显示对应的信息 if(lvi != null) { toolTip.show("Test",listView,new Point(e.X,e.Y),1000);

Android 自定义 ListView 显示网络歌曲列表

本文内容 环境 项目结构 演示自定义 ListView 显示网络歌曲列表 参考资料 本文最开始看的一个国人的文章,没有源代码,根据文中提供的源代码,自己新建的项目(最可气的是,没有图标图片资源,只能自己乱编),但程序不是很稳定,有时能显示出列表中的缩略图,有时显示不出来,还在主线程访问了网络.后看文章评论,作者给出英文原文链接,本来想这下没事了吧,结果下载源代码运行后,还是有问题~仔细看英文原文,原来他也是根据 Github 上一个项目的基础上搞的,只是添加了式样,以及显示完整的歌曲列表,包括歌

Android_(控件)使用ListView显示Android系统中SD卡的文件列表_02

使用ListView显示Android SD卡中的文件列表 父类布局activity_main.xml,子类布局item_filelayout(一个文件的单独存放) 运行截图: 程序结构 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="

Android_(控件)使用ListView显示Android系统中联系人信息

使用ListView显示手机中联系人的姓名和电话号码 父类布局activity_main.xml,子类布局line.xml(一个文件的单独存放) 运行截图: (避免泄露信息对部分地方进行了涂鸦O(∩_∩)O!) 程序结构 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android&quo

安卓开发_浅谈ListView之分页列表

前言: 在开发的过程中,有时候我们需要从网络解析一些数据,比如最近的一些新闻,我们需要把这些数据用ListView显示出来. 因为是解析一个网络数据源,这样将会一下子将所有的数据解析出来,当数据源数据过大时,就可能会造成解析时间过长,占用内存过大等问题. 这时候想到用分页列表来显示这些数据,即每次只显示一个屏幕所能容纳条数的列表项数据,当用户手指向下拉动的时候,才再加载一个屏幕所能容纳的条数的数据,这样就解决了上述问题. -------------------------------------

ListView---复杂的listview显示

1 . 初始化数据 private void fillData() { ll_loading.setVisibility(View.VISIBLE); // 显示进度 new Thread() { public void run() { appInfos = AppInfoProvider.getAppInfos(AppManagerActivity.this); //得到所有的应用程序 userAppInfos = new ArrayList<AppInfo>(); //userAppinf

硅谷社交9--邀请信息列表页面

1.页面布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent&

四大适配器控制ListView显示

ArraryAdapter.SimpleCursorAdapter.SimpleAdapter.MyAdapter四大适配器的实现在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示.抽空把对ListView的使用做了整理,并写了个小例子,如下图. 列表的显示需要三个元素:1.ListVeiw 用来展示列表的View.2.适配器 用来把数据映射到ListView上的中介.3.数据    具体的将被映射的字符串,图片,或者基本组件.根