ListView之适配器的使用

阅读更多

ListView之适配器的使用,包含了ArrayAdapter,SimpleAdapter ,BaseAdapter等适配器。

 

 

1:ArrayAdapter

 

 

 

Java代码
  1. /**** 
  2.  * 
  3.  * 
  4.  * ArrayAdapter 
  5.  * @author Administrator 
  6.  * 
  7.  */  
  8. public class ArrayAdapterActivity extends Activity {  
  9.    
  10.    private ListView mListView;  
  11.     //定义一个String数组,数组里的数据就是ListView里的一项  
  12.    String[] arrayDate={"笑傲江湖","风清扬","令狐冲","岳不群","乔峰","虚竹","段誉","中神通","东邪","西毒","南帝","北丐"};  
  13.     @Override  
  14.     protected void onCreate(Bundle savedInstanceState) {  
  15.         super.onCreate(savedInstanceState);  
  16.         setContentView(R.layout.activity_arrayadapter);  
  17.         initView();  
  18.     }  
  19.     private void initView() {  
  20.       mListView=(ListView)findViewById(R.id.listView1);  
  21.       //新建一个数组适配器ArrayAdapter绑定数据,参数(当前的Activity,布局文件,数据源)  
  22.       //android.R.layout.simple_list_item_1      本身自带布局  
  23.       ArrayAdapter  adapter=new ArrayAdapter(this, android.R.layout.simple_expandable_list_item_1,arrayDate);  
  24.       //视图(ListView)加载适配器  
  25.       mListView.setAdapter(adapter);  
  26.       mListView.setOnItemClickListener(new OnItemClickListener() {  
  27.    
  28.          @Override  
  29.          public voidonItemClick(AdapterView parent, View view,  
  30.                 int position,long id) {  
  31.              
  32.             Toast.makeText(ArrayAdapterActivity.this,arrayDate[position],1).show();  
  33.              
  34.          }  
  35.       });  
  36.    }  
  37.      
  38. }  



预览效果:

 

ListView之适配器的使用_第1张图片

 

2:SimpleAdapter

 

使用simpleAdapter的数据用一般都是HashMap构成的List,list的每一节对应ListView的每一行。HashMap的每个键值数据映射到布局文件中对应id的组件上。

 

归纳步骤:

 

 

 

1、准备数据源:指定由Map组成的List数据源

 

2、新建适配器,设置键值名和对应控件id,绑定数据

 

3、视图加载适配器

 

参数:

 

new SimpleAdapter(context, data, resource, from, to)

 

context ------SimpleAdapter关联的View的运行环境

 

data ---------一个Map组成的List。在列表中的每个条目对应列表中的一行,每一个map中应该包含所有在from参数中指定的键

 

resource ------ 一个定义列表项的布局文件的资源ID。布局文件将至少应包含那些在to中定义了的ID

 

from ---------- 一个将被添加到Map映射上的键名

 

to  -------------将绑定数据的视图的ID,跟from参数对应

 

 

 

代码:

 

 

 

Java代码
  1. /**** 
  2.  * 
  3.  * 
  4.  * SimpleAdapter 
  5.  * 
  6.  * @author Administrator 
  7.  * 
  8.  */  
  9. public class  SimpleAdapterActivity extends Activity {  
  10.    
  11.    private ListView mshow_list;  
  12.    String[] name = { "张三","李四","小星星","静静","明明","小张" };  
  13.    
  14.    int[] img = {R.drawable.a2, R.drawable.a3,R.drawable.a4, R.drawable.a5,R.drawable.a6,R.drawable.ic_launcher};  
  15.    protected void  onCreate(android.os.Bundle savedInstanceState) {  
  16.        
  17.       super.onCreate(savedInstanceState);  
  18.       //加载布局文件  
  19.       setContentView(R.layout.activity_simpleadapter);  
  20.       //2.获取listview控件的对象  
  21.       mshow_list=(ListView)findViewById(R.id.show_listview);  
  22.        
  23.       /** 
  24.        * 第四步:定义SimpleAdapter(并加载对应item布局文件,获得对应的keY,获得对应item布局文件中的组件的id 
  25.        * 
  26.        * 第二个参数data:数据源 
  27.        * 第三个参数resource :listView每个item对应的布局文件 
  28.        * 第四个参数 from: 
  29.        * 第五个参数to: 
  30.        *new String[]{对应的key}v 
  31.        */  
  32.       SimpleAdapter simpleAdapter=new SimpleAdapter(this, get_data(),  
  33.             R.layout.item_simple,new String[]{  
  34.          "type","age","img"},newint[]{R.id.type_txt,R.id.age_txt,R.id.img});  
  35.        
  36.       //第五步:通过setAdapter将适配器绑定到listView控件  
  37.       mshow_list.setAdapter(simpleAdapter);  
  38.              
  39.        
  40.        
  41.    };  
  42.    
  43.    /*** 
  44.     * 数据源 
  45.     * 
  46.     * 
  47.     */  
  48.    private  ArrayList> get_data() {  
  49.       // 定义一个ArrayList的集合(集合中又封装一个map类型的集合)  
  50.       ArrayList>data_list = new ArrayList>();  
  51.       for (int i = 0; i
  52.          // key,value intstring map不能new map  
  53.          Map data_map = newHashMap();  
  54.          data_map.put("type", name[i]);  
  55.          data_map.put("age", i + 10+"岁");  
  56.          data_map.put("img", img[i]);  
  57.          // 将map集合添加(封装)到ArrayList集合中  
  58.          data_list.add(data_map);  
  59.    
  60.       }  
  61.       // 返回ArrayList集合  
  62.       returndata_list;  
  63.   
  64.    }  
  65. }  



预览效果:

 

ListView之适配器的使用_第2张图片

 

3:BaseAdapter

 

步骤

使用BaseAdapter实现复杂的ListView的步骤:

 

1 首先准备好需要显示在LiseView中的数据 ——List

 


2 然后编写2 个XML 文件 第一个文件是ListView控件所在的布局文件 第二个文件是ListVIew中每一个item的布局文件

 


3 创建一个继承自BaseAdapter的类

 


4 为ListView绑定适配器 setAdapter(继承BaseAdapter 类的实例)

 


5 用传统方式来覆写适配器的getView函数和getCount 函数(从参数convertView里映射布局文件,find各个控件填充数据)


6 加入ViewHolder类(定义n个控件的声明)用convertView.setTag(viewHolder)在View和Object之间关联,此目的是节省find多次的时间。

 

 

 

 

代码:

 

Activity.java

 

 

 

Java代码
  1. /*** 
  2.  * 
  3.  * 
  4.  * BaseAdapter 
  5.  * @author Administrator 
  6.  * 
  7.  */  
  8. public class BaseAdapterActivity extends Activity {  
  9.    
  10.    private ListView mbaseshow_listview;  
  11.    private String[] arrayDate={"东方不败","天龙八部","九阴真经","东邪","南帝","北丐"};  
  12.    private int[] img = {R.drawable.l2, R.drawable.l3,R.drawable.l1, R.drawable.a5,R.drawable.a6,R.drawable.ic_launcher};  
  13.    @Override  
  14.    protected void onCreate(Bundle savedInstanceState) {  
  15.       // TODOAuto-generated method stub  
  16.       super.onCreate(savedInstanceState);  
  17.       // 加载布局  
  18.       setContentView(R.layout.baselistview_layout);  
  19.       mbaseshow_listview =(ListView) findViewById(R.id.baseshow_listview);  
  20.       initView();  
  21.     
  22.    }  
  23.     
  24.     
  25.     
  26.    private void initView() {  
  27.       // TODOAuto-generated method stub  
  28.        MyAdapter myAdapter = new MyAdapter(this,arrayDate,img);  
  29.        //绑定适配器  
  30.         mbaseshow_listview.setAdapter(myAdapter);  
  31.         //刷新适配器  
  32.        myAdapter.notifyDataSetChanged();  
  33.        /**ListView的item点击事件 
  34.         * 
  35.         * 
  36.         *AdapterView arg0:适配器 
  37.         *View arg1:表示当前item的view(视图),通过它可以获取该item中的各个组件 
  38.         *position:当前item的id, 
  39.         *arg3:表示当前的item在listview中相对位置 
  40.         * 
  41.         * 
  42.         **/  
  43.         mbaseshow_listview.setOnItemClickListener(newOnItemClickListener() {  
  44.    
  45.          @Override  
  46.          public voidonItemClick(AdapterView arg0, View arg1, int position,  
  47.                 long arg3) {  
  48.             Toast.makeText(BaseAdapterActivity.this,"你点击了"+arrayDate[position],-1000).show();  
  49.              
  50.          }  
  51.       });  
  52.          
  53.         mbaseshow_listview.setOnItemLongClickListener(newOnItemLongClickListener() {  
  54.    
  55.          @Override  
  56.          public boolean onItemLongClick(AdapterView arg0, View arg1,  
  57.                 int position,long arg3) {  
  58.             Toast.makeText(BaseAdapterActivity.this,"执行了长按事件",0 ).show();  
  59.             return false;  
  60.          }  
  61.       });  
  62.    }    
  63.   
  64.   
  65. BaseAdapter.java  
  66.   
  67.   
  68. public class MyAdapter extends BaseAdapter {  
  69.   
  70.    private String[] datas;  
  71.    private LayoutInflater inflater;  
  72.    private int[] imgs;  
  73.    public MyAdapter(Contextcotext, String[] datas,int[] imgs) {  
  74.       this.datas = datas;  
  75.        inflater =LayoutInflater.from(cotext);  
  76.        this.imgs=imgs;  
  77.    }  
  78.    
  79.    /** 
  80.     * 
  81.     * 返回的item总数量 
  82.     * 
  83.     */  
  84.    public intgetCount() {  
  85.       return datas.length;  
  86.    }  
  87.    
  88.    /** 
  89.     * 
  90.     * item的位置 
  91.     * 
  92.     */  
  93.    @Override  
  94.    public Object getItem(int position){  
  95.       // TODOAuto-generated method stub  
  96.       return datas[position];  
  97.    }  
  98.    
  99.    /** 
  100.     * 
  101.     * 对应每个item里面控件的id 
  102.     * 
  103.     */  
  104.    @Override  
  105.    public longgetItemId(int position) {  
  106.       // TODOAuto-generated method stub  
  107.       return position;  
  108.    }  
  109.    
  110.    @Override  
  111.    public View getView(int position,View convertView, ViewGroup parent) {  
  112.    
  113.       ViewHolde viewHolde = null;  
  114.        
  115.       if (null ==convertView) {  
  116.          // 实例化 ViewHolde对象  
  117.    
  118.       viewHolde = newViewHolde();  
  119.          convertView = inflater.inflate(  
  120.                 R.layout.item_listview,null);  
  121.          viewHolde.img=(ImageView)convertView.findViewById(R.id.img);  
  122.          viewHolde.mtype_txt =(TextView) convertView  
  123.                 .findViewById(R.id.text);  
  124.           
  125.          convertView.setTag(viewHolde);  
  126.    
  127.       }  
  128.        
  129.       else {  
  130.          viewHolde = (ViewHolde)convertView.getTag();  
  131.       }  
  132.        
  133.       viewHolde.mtype_txt.setText(datas[position]);  
  134.       viewHolde.img.setImageResource(imgs[position]);  
  135.       // 返回item视图  
  136.       returnconvertView;  
  137.    
  138.    }  
  139.    
  140.    class ViewHolde {  
  141.       TextView mtype_txt;  
  142.       ImageView img;  
  143.    }  
  144.    
  145. }  



预览效果:

ListView之适配器的使用_第3张图片

 

 

 

 

 

点击下载源码

 

你可能感兴趣的:(适配器,Listview,ArrayAdapter,SimpleAdapter,BaseAdapter)