android学习之ListView总结

来源:互联网 发布:杭州龙席网络怎么样 编辑:程序博客网 时间:2024/04/29 14:29

ListView总结

在原来的基础上,增加了点击后的消息响应函数。

源代码下载:http://download.csdn.net/detail/nuptboyzhb/4484920

列表的显示需要三个元素:

1.ListVeiw 用来展示列表的View。

2.适配器 用来把数据映射到ListView上的中介。

3.数据    具体的将被映射的字符串,图片,或者基本组件。

分类:

根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter

其中以ArrayAdapter最为简单,只能展示一行字。SimpleAdapter有最好的扩充性,可以自定义出各种效果。SimpleCursorAdapter可以认为是SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。

我们从最简单的ListView开始

MyListView.java

[java] view plaincopyprint?
  1. package org.lee.android;  
  2.   
  3. import java.util.ArrayList;  
  4.   
  5. import java.util.List;  
  6.   
  7. import android.app.Activity;  
  8.   
  9. import android.os.Bundle;  
  10.   
  11. import android.util.Log;  
  12.   
  13. import android.view.View;  
  14.   
  15. import android.widget.AdapterView;  
  16.   
  17. import android.widget.ArrayAdapter;  
  18.   
  19. import android.widget.ListView;  
  20.   
  21. import android.widget.Toast;  
  22.   
  23. import android.widget.AdapterView.OnItemClickListener;  
  24.   
  25. publicclass MyListView extends Activity implementsOnItemClickListener{  
  26.   
  27.    private ListView listView;  
  28.   
  29.    //private List<String> data = new ArrayList<String>();  
  30.   
  31.    @Override  
  32.   
  33.    publicvoid onCreate(Bundle savedInstanceState){  
  34.   
  35.       super.onCreate(savedInstanceState);  
  36.   
  37.       listView = new ListView(this);  
  38.   
  39.       List<String>list=getData();  
  40.   
  41.       ArrayAdapter<String>adapter=newArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,list);  
  42.   
  43.       listView.setAdapter(adapter);  
  44.   
  45.       setContentView(listView);  
  46.   
  47.       listView.setOnItemClickListener(this);//绑定监听接口    
  48.   
  49.    }  
  50.   
  51.     
  52.   
  53.     
  54.   
  55.     
  56.   
  57.    private List<String> getData(){  
  58.   
  59.        
  60.   
  61.       List<String> data = newArrayList<String>();  
  62.   
  63.       data.add("测试数据1");  
  64.   
  65.       data.add("测试数据2");  
  66.   
  67.       data.add("测试数据3");  
  68.   
  69.       data.add("测试数据4");  
  70.   
  71.       return data;  
  72.   
  73.    }  
  74.   
  75.    /*实现OnItemClickListener接口*/  
  76.   
  77.    @Override  
  78.   
  79.    publicvoid onItemClick(AdapterView<?> parent, View v, int position, long id){  
  80.   
  81.       Log.d("Click","you have click!");  
  82.   
  83.       switch(position){  
  84.   
  85.       case 0:  
  86.   
  87.          Toast.makeText(MyListView.this,  
  88.   
  89.                 "你点击了第一个!",  
  90.   
  91.                 Toast.LENGTH_SHORT).show();  
  92.   
  93.          break;  
  94.   
  95.       case 1:  
  96.   
  97.          Toast.makeText(MyListView.this,  
  98.   
  99.                 "你点击了第二个!",  
  100.   
  101.                 Toast.LENGTH_SHORT).show();  
  102.   
  103.          break;  
  104.   
  105.       case 2:  
  106.   
  107.          Toast.makeText(MyListView.this,  
  108.   
  109.                 "你点击了第三个!",  
  110.   
  111.                 Toast.LENGTH_SHORT).show();  
  112.   
  113.          break;  
  114.   
  115.       case 3:  
  116.   
  117.          Toast.makeText(MyListView.this,  
  118.   
  119.                 "你点击了第四个!",  
  120.   
  121.                 Toast.LENGTH_SHORT).show();  
  122.   
  123.          break;  
  124.   
  125.       }  
  126.   
  127.    }  
  128.   
  129. }  


上面代码使用了ArrayAdapter(Context context,int textViewResourceId, List<T>objects)来装配数据,要装配这些数据就需要一个连接ListView视图对象和数组数据的适配器来两者的适配工作,ArrayAdapter的 构造需要三个参数,依次为this,布局文件(注意这里的布局文件描述的是列表的每一行的布 局,android.R.layout.simple_list_item_1是系统定义好的布局文件只显示一行文字,数据源(一个List集合)。同时 用setAdapter()完成适配的最后工作。

SimpleAdapter

simpleAdapter的扩展性最好,可以定义各种各样的布局出来,可以放上ImageView(图片),还可以放上Button(按钮),CheckBox(复选框)等等。下面的代码都直接继承了ListActivity,ListActivity和普通的Activity没有太大的差别,不同就是对显示ListView做了许多优化,方便显示而已。

下面的程序是实现一个带有图片的类表。

首先需要定义好一个用来显示每一个列内容的xml

[html] view plaincopyprint?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2.   
  3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  4.   
  5.    android:orientation="horizontal" android:layout_width="fill_parent"  
  6.   
  7.    android:layout_height="fill_parent">  
  8.   
  9.    <ImageViewandroid:idImageViewandroid:id="@+id/img"  
  10.   
  11.       android:layout_width="wrap_content"  
  12.   
  13.       android:layout_height="wrap_content"  
  14.   
  15.       android:layout_margin="5px"/>  
  16.   
  17.    <LinearLayout android:orientation="vertical"  
  18.   
  19.       android:layout_width="wrap_content"  
  20.   
  21.       android:layout_height="wrap_content">  
  22.   
  23.       <TextView android:id="@+id/title"  
  24.   
  25.          android:layout_width="wrap_content"  
  26.   
  27.          android:layout_height="wrap_content"  
  28.   
  29.          android:textColor="#FFFFFFFF"  
  30.   
  31.          android:textSize="22px" />  
  32.   
  33.       <TextView android:id="@+id/info"  
  34.   
  35.          android:layout_width="wrap_content"  
  36.   
  37.          android:layout_height="wrap_content"  
  38.   
  39.          android:textColor="#FFFFFFFF"  
  40.   
  41.          android:textSize="13px" />  
  42.   
  43.    </LinearLayout>  
  44.   
  45. </LinearLayout>  


下面是实现代码java:

[java] view plaincopyprint?
  1. package org.lee.android;  
  2.   
  3.    
  4.   
  5. import java.util.ArrayList;  
  6.   
  7. import java.util.HashMap;  
  8.   
  9. import java.util.List;  
  10.   
  11. import java.util.Map;  
  12.   
  13.    
  14.   
  15. import android.app.ListActivity;  
  16.   
  17. import android.os.Bundle;  
  18.   
  19. import android.util.Log;  
  20.   
  21. import android.view.View;  
  22.   
  23. import android.widget.AdapterView;  
  24.   
  25. import android.widget.ListView;  
  26.   
  27. import android.widget.SimpleAdapter;  
  28.   
  29. import android.widget.Toast;  
  30.   
  31. importandroid.widget.AdapterView.OnItemClickListener;  
  32.   
  33. /** 
  34.  
  35.  * @author allin 
  36.  
  37.  * 
  38.  
  39.  */  
  40.   
  41. publicclass MyListView3 extends ListActivity implementsOnItemClickListener{  
  42.   
  43.    
  44.   
  45.    
  46.   
  47.    // private List<String> data = new ArrayList<String>();  
  48.   
  49.    @Override  
  50.   
  51.    publicvoid onCreate(Bundle savedInstanceState) {  
  52.   
  53.       super.onCreate(savedInstanceState);  
  54.   
  55.    
  56.   
  57.       SimpleAdapter adapter = new SimpleAdapter(this,getData(),R.layout.vlist,  
  58.   
  59.             new String[]{"title","info","img"},  
  60.   
  61.             newint[]{R.id.title,R.id.info,R.id.img});  
  62.   
  63.       setListAdapter(adapter);  
  64.   
  65.       ListViewlistView=getListView();  
  66.   
  67.       listView.setOnItemClickListener(this);  
  68.   
  69.    }  
  70.   
  71.    
  72.   
  73.    private List<Map<String,Object>> getData() {  
  74.   
  75.       List<Map<String,Object>> list = new ArrayList<Map<String, Object>>();  
  76.   
  77.    
  78.   
  79.       Map<String, Object> map =new HashMap<String, Object>();  
  80.   
  81.       map.put("title""G1");  
  82.   
  83.       map.put("info""google 1");  
  84.   
  85.       map.put("img",R.drawable.i1);  
  86.   
  87.       list.add(map);  
  88.   
  89.    
  90.   
  91.       map = new HashMap<String,Object>();  
  92.   
  93.       map.put("title""G2");  
  94.   
  95.       map.put("info""google 2");  
  96.   
  97.       map.put("img",R.drawable.i2);  
  98.   
  99.       list.add(map);  
  100.   
  101.    
  102.   
  103.       map = new HashMap<String,Object>();  
  104.   
  105.       map.put("title""G3");  
  106.   
  107.       map.put("info""google 3");  
  108.   
  109.       map.put("img",R.drawable.i3);  
  110.   
  111.       list.add(map);  
  112.   
  113.        
  114.   
  115.       return list;  
  116.   
  117.    }  
  118.   
  119.    /*实现OnItemClickListener接口*/  
  120.   
  121.    @Override  
  122.   
  123.    publicvoid onItemClick(AdapterView<?> parent,View v, int position, long id){  
  124.   
  125.       Log.d("Click","you have click!");  
  126.   
  127.       switch(position){  
  128.   
  129.       case 0:  
  130.   
  131.          Toast.makeText(MyListView3.this,  
  132.   
  133.                 "你点击了第一个!",  
  134.   
  135.                 Toast.LENGTH_SHORT).show();  
  136.   
  137.          break;  
  138.   
  139.       case 1:  
  140.   
  141.          Toast.makeText(MyListView3.this,  
  142.   
  143.                 "你点击了第二个!",  
  144.   
  145.                 Toast.LENGTH_SHORT).show();  
  146.   
  147.          break;  
  148.   
  149.       case 2:  
  150.   
  151.          Toast.makeText(MyListView3.this,  
  152.   
  153.                 "你点击了第三个!",  
  154.   
  155.                 Toast.LENGTH_SHORT).show();  
  156.   
  157.          break;  
  158.   
  159.       }  
  160.   
  161.    }  
  162.   
  163. }  


使用simpleAdapter的数据用一般都是HashMap构成的List,list的每一节对应ListView的每一行。HashMap的每个键 值数据映射到布局文件中对应id的组件上。因为系统没有对应的布局文件可用,我们可以自己定义一个布局vlist.xml。下面做适配,new一个SimpleAdapter参数一次是:this,布局文件(vlist.xml),HashMap的 title 和 info,img。布局文件的组件id,title,info,img。布局文件的各组件分别映射到HashMap的各元素上,完成适配。

原创粉丝点击