关于Android中适配器的使用简介

关于适配器的解释,简单的讲就是把要显示给用户的数据信息通过适当的模式动态的填充各种ListView,也可以看作是界面数据绑定的一种理解,它所操纵的数据一般都是一些比较复杂的数据,界面是有一定规律的View。由于一些特殊的需要,往往需要自己定义适配器来完成显示功能,下面就以较为常用的适配器简介其用法:

1、首先要定义一个用于显示ListView的布局文件main.xml,如下

 

  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="vertical" >  
  6.   
  7.     <ListView  
  8.         android:id="@+id/person_list"  
  9.         android:layout_width="match_parent"  
  10.         android:layout_height="wrap_content"  
  11.         android:drawSelectorOnTop="false"  
  12.         android:scrollbars="vertical" />  
  13.   
  14. </LinearLayout>  


2、再定义一个ListView中要显示的内容的布局文件item.xml,如下

 

 

  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.     <TextView  
  8.         android:id="@+id/user_name"  
  9.         android:layout_width="wrap_content"  
  10.         android:layout_height="wrap_content"/>  
  11.   
  12.     <TextView  
  13.         android:id="@+id/user_age"  
  14.         android:layout_width="wrap_content"  
  15.         android:layout_height="wrap_content" />  
  16.   
  17. </LinearLayout>  


3、自定义一个适配器,使数据充填到对应的View中,该适配器继承自abstract类BaseAdapter

 

 

  1. package com.ui.adapter.demo;  
  2.   
  3. import java.util.List;  
  4.   
  5. import android.content.Context;  
  6. import android.view.LayoutInflater;  
  7. import android.view.View;  
  8. import android.view.ViewGroup;  
  9. import android.widget.BaseAdapter;  
  10. import android.widget.TextView;  
  11.   
  12. public class PersonAdapter extends BaseAdapter   
  13. {  
  14.     // 上下文对象  
  15.     private Context context;  
  16.     // 要绑定的数据  
  17.     private List<Person> persons;  
  18.     // 自定义的内部类  
  19.     private ViewHolder holder;  
  20.     // 布局文件加载器  
  21.     private LayoutInflater inflater;  
  22.       
  23.     public PersonAdapter(Context context, List<Person> persons)   
  24.     {  
  25.         super();  
  26.         this.context = context;  
  27.         this.persons = persons;  
  28.     }  
  29.     /*取得绑定的数据的个数*/  
  30.     @Override  
  31.     public int getCount()   
  32.     {  
  33.         return persons.size();  
  34.     }  
  35.     /*取得指定位置的对象*/  
  36.     @Override  
  37.     public Object getItem(int position)   
  38.     {  
  39.         return persons.get(position);  
  40.     }  
  41.     /*取得绑定数据的索引*/  
  42.     @Override  
  43.     public long getItemId(int position)   
  44.     {  
  45.         return position;  
  46.     }  
  47.     /*取得指定位置的View*/  
  48.     @Override  
  49.     public View getView(int position, View convertView, ViewGroup parent)   
  50.     {  
  51.         holder = null;  
  52.         // 重生之大文豪www.dwhao.com获取加载器对象  
  53.         inflater = LayoutInflater.from(context);      
  54.           
  55.         if (null == convertView)   
  56.         {  
  57.             // 加载布局文件  
  58.             convertView = inflater.inflate(R.layout.person, null);  
  59.             holder = new ViewHolder();  
  60.             // 获取布局文件中的各控件  
  61.             holder.nameText = (TextView) convertView  
  62.                     .findViewById(R.id.user_name);  
  63.             holder.ageText = (TextView) convertView  
  64.                     .findViewById(R.id.user_age);  
  65.               
  66.             convertView.setTag(holder);  
  67.         }  
  68.         else   
  69.         {  
  70.             convertView.getTag();  
  71.         }  
  72.         // 给控件绑定数据  
  73.         holder.nameText.setText(persons.get(position).getName());  
  74.         holder.ageText.setText(persons.get(position).getAge());  
  75.           
  76.         return convertView;  
  77.     }  
  78.     /** 
  79.      * 自定义内部类,类似于缓存的作用 
  80.      */  
  81.     private class ViewHolder  
  82.     {  
  83.         TextView nameText;  
  84.           
  85.         TextView ageText;  
  86.     }  
  87. }  
原文地址:https://www.cnblogs.com/jiangye/p/3495570.html