码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-08-18 17:55:42      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:android   style   blog   http   color   java   使用   os   

2014-08-18

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

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

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

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

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

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

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

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

适配器数据的刷新

notifyDataChanged

 

 

数组适配器(ArrayAdapter)

bubuko.com,布布扣
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文件
 
bubuko.com,布布扣
 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文件

bubuko.com,布布扣

 

 

简单适配器(SimpleAdapter)

bubuko.com,布布扣
 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文件布局

 

bubuko.com,布布扣
 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代码

 

bubuko.com,布布扣

 

 

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

bubuko.com,布布扣
 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简单适配器的基础上添加监听事件

bubuko.com,布布扣

 

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

在快速滑动时添加项目

bubuko.com,布布扣
 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 }
监听滚动事件

bubuko.com,布布扣

 

使用ListView显示信息列表,用监听器和适配器,操作,布布扣,bubuko.com

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

标签:android   style   blog   http   color   java   使用   os   

原文地址:http://www.cnblogs.com/sidianshui/p/3919803.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!