ListView自定义适配器

网上关于这方面的好的文章:

http://yilee.info/android-diy-listview.html

http://blog.csdn.net/xiaominghimi/article/details/6314704

http://blog.csdn.net/chenzheng_java/article/details/6202586#


主布局文件:

[html]  view plain  copy
 print ?
  1. main.xml  
  2.   
  3.   
  4. <?xml version="1.0" encoding="utf-8"?>  
  5. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  6.     android:orientation="vertical"  
  7.     android:layout_width="fill_parent"  
  8.     android:layout_height="fill_parent"  
  9.     >  
  10. <TextView    
  11.     android:layout_width="fill_parent"   
  12.     android:layout_height="wrap_content"   
  13.     android:text="@string/hello"  
  14.     />  
  15.       
  16.       
  17.     <ListView   
  18.      android:layout_width="fill_parent"  
  19.     android:layout_height="wrap_content"    
  20.     android:id="@+id/lv"  
  21.     />  
  22.       
  23.     <ListView   
  24.      android:layout_width="fill_parent"  
  25.     android:layout_height="fill_parent"    
  26.     android:id="@+id/lv_2"  
  27.     />  
  28. </LinearLayout>  


条目布局文件
[html]  view plain  copy
 print ?
  1. item.xml  
  2.   
  3. <?xml version="1.0" encoding="utf-8"?>  
  4. <LinearLayout  
  5.   xmlns:android="http://schemas.android.com/apk/res/android"  
  6.     android:layout_marginTop="10dip"  
  7.      android:layout_marginLeft="20dip"  
  8.      android:layout_width="fill_parent"  
  9.      android:layout_height="wrap_content"  
  10.      android:orientation="horizontal"  
  11.   >  
  12.     
  13.   <RelativeLayout android:id="@+id/rl_root"  
  14.                     android:layout_width="fill_parent"   
  15.                     android:layout_height="fill_parent"  
  16.                     android:layout_weight="1">  
  17.                       <TextView  
  18.                          android:layout_marginTop="5dip"  
  19.                          android:layout_width="wrap_content"  
  20.                          android:layout_height="wrap_content"   
  21.                          android:textColor="#0F6D91"  
  22.                          android:textSize="18dip"  
  23.                          android:id="@+id/tv_wordbreeak_danci"  
  24.                       />  
  25.                         
  26.                         
  27.                       <TextView  
  28.                          android:layout_marginTop="5dip"  
  29.                          android:layout_width="wrap_content"  
  30.                          android:layout_height="wrap_content"   
  31.                          android:textColor="#0F6D91"  
  32.                          android:textSize="18dip"  
  33.                          android:id="@+id/tv_wordbreeak_dancinum"  
  34.                       />  
  35.                         
  36.                         
  37.                       <Button   
  38.                         android:id="@+id/bt_wordbreak_xiangxi"  
  39.                         android:layout_height="wrap_content"   
  40.                         android:layout_width="110dp"   
  41.                         android:text="详细"  
  42.                         android:textColor="#0F6D91"  
  43.                         android:layout_alignParentRight="true"  
  44.                         android:layout_gravity="right"   
  45.                      />   
  46.                      </RelativeLayout>  
  47.                        
  48. </LinearLayout>  


条目布局文件
[html]  view plain  copy
 print ?
  1. item2.xml  
  2.   
  3. <?xml version="1.0" encoding="utf-8"?>  
  4. <LinearLayout  
  5.   xmlns:android="http://schemas.android.com/apk/res/android"  
  6.     android:layout_marginTop="10dip"  
  7.      android:layout_marginLeft="20dip"  
  8.      android:layout_width="fill_parent"  
  9.      android:layout_height="wrap_content"  
  10.      android:orientation="horizontal"  
  11.   >  
  12.     
  13.   <RelativeLayout android:id="@+id/rl_root"  
  14.                     android:layout_width="fill_parent"   
  15.                     android:layout_height="fill_parent"  
  16.                     android:layout_weight="1">  
  17.                       <TextView  
  18.                          android:layout_marginTop="5dip"  
  19.                          android:layout_width="wrap_content"  
  20.                          android:layout_height="wrap_content"    
  21.                          android:textColor="#0F6D91"  
  22.                          android:textSize="18dip"  
  23.                          android:id="@+id/tv_1"  
  24.                       />  
  25.                         
  26.                         
  27.                       <TextView  
  28.                          android:layout_marginTop="5dip"  
  29.                          android:layout_width="wrap_content"  
  30.                          android:layout_height="wrap_content"  
  31.                          android:layout_marginLeft="50dip"  
  32.                          android:textColor="#0F6D91"  
  33.                          android:textSize="18dip"  
  34.                          android:id="@+id/tv_2"  
  35.                       />  
  36.                         
  37.                       <TextView  
  38.                          android:layout_marginTop="5dip"  
  39.                          android:layout_width="wrap_content"  
  40.                           android:layout_marginLeft="100dip"  
  41.                          android:layout_height="wrap_content"   
  42.                          android:textColor="#0F6D91"  
  43.                          android:textSize="18dip"  
  44.                          android:id="@+id/tv_3"  
  45.                       />  
  46.                          
  47.                      </RelativeLayout>  
  48.                        
  49. </LinearLayout>  


主页面
[java]  view plain  copy
 print ?
  1. MainActivity.java  
  2.   
  3.   
  4. package cn.ls;  
  5.   
  6. import java.util.ArrayList;  
  7. import java.util.HashMap;  
  8. import java.util.Map;  
  9. import java.util.Map.Entry;  
  10.   
  11. import android.app.Activity;  
  12. import android.app.ListActivity;  
  13. import android.os.Bundle;  
  14. import android.widget.ListView;  
  15.   
  16. /** 
  17.  * 这里有两个适配器。 
  18.  * @author Administrator 
  19.  * 
  20.  */  
  21. public class MainActivity extends Activity {  
  22.       
  23.     ListView listView , lv_2;  
  24.       
  25.     public void onCreate(Bundle savedInstanceState) {  
  26.         super.onCreate(savedInstanceState);   
  27.         setContentView(R.layout.main);  
  28.         /*通过ListView的ID来获取*/  
  29.         listView = (ListView) findViewById(R.id.lv);  
  30.         lv_2 = (ListView) findViewById(R.id.lv_2);  
  31.           
  32.         ArrayList<HashMap<String, Object>> data = getData();   
  33.         ArrayList<HashMap<String, Object>> data2 = getData2();   
  34.         MyAdapter adapter = new MyAdapter(this, data);   
  35.         MyAdapter2 adapter_2 = new MyAdapter2(this, data2); //适配三个TextView.  
  36.  //       setListAdapter(adapter);  //这个是ListView中的内部类  
  37.         listView.setAdapter(adapter);  
  38.           
  39.         lv_2.setAdapter(adapter_2);  
  40.     }  
  41.   
  42.     /** 
  43.      * 显示三个TextView的数据。 
  44.      * @return 
  45.      */  
  46.     private ArrayList<HashMap<String, Object>> getData2() {  
  47.           ArrayList<HashMap<String, Object>> arrayList = new ArrayList<HashMap<String, Object>>();   
  48.             //根据需求添加一些数据,   
  49.             HashMap<String, Object> tempHashMap = new HashMap<String, Object>();   
  50.               
  51.             //相同的样式布局,可以设置显示不同的文字。  
  52.             for (int i = 0; i <25; i++) {    
  53.                 tempHashMap.put("tv_1""左面");   
  54.                 tempHashMap.put("tv_2""中间");   
  55.                 tempHashMap.put("tv_3""右面");    
  56.                 arrayList.add(tempHashMap);   
  57.             }  
  58.             System.out.println("个数---------------:" + arrayList.size());  
  59.             return arrayList;   
  60.     }  
  61.   
  62.     /** 
  63.      * 显示TextView和按钮。  TextView是变动的。 
  64.      * @return 
  65.      */  
  66.     private ArrayList<HashMap<String, Object>> getData() {  
  67.         ArrayList<HashMap<String, Object>> arrayList = new ArrayList<HashMap<String, Object>>();   
  68.         //根据需求添加一些数据,   
  69.         HashMap<String, Object> tempHashMap = new HashMap<String, Object>();   
  70.           
  71.         //相同的样式布局,可以设置显示不同的文字。  
  72.         for (int i = 0; i <5; i++) {    
  73.             tempHashMap.put("danci1""餐饮美食");   
  74.             tempHashMap.put("danci1_2""美食");   
  75.             tempHashMap.put("danci1_3""我爱美食");   
  76.             tempHashMap.put("danci2""10");//sin.get();    
  77.             arrayList.add(tempHashMap);   
  78.         }   
  79.    
  80.         System.out.println("个数:" + arrayList.size());  
  81.         return arrayList;   
  82.       
  83.     }  
  84. }  


适配器文件1
[java]  view plain  copy
 print ?
  1. <pre name="code" class="java">MyAdapter.java  
  2.   
  3. /** 
  4.  * 自定义适配器。 
  5.  * @author Administrator 
  6.  * 
  7.  */  
  8. public class MyAdapter extends BaseAdapter{   
  9.   
  10.   
  11.      private ArrayList<HashMap<String, Object>> data;   
  12.      private LayoutInflater layoutInflater;   
  13.      private Context context;  
  14.       
  15.     public MyAdapter(Context context,ArrayList<HashMap<String, Object>> data) {  
  16.         this.context = context;  
  17.         this.data = data;  
  18.         this.layoutInflater = LayoutInflater.from(context);  
  19.     }   
  20.     public int getCount() {  
  21.         return data.size();  
  22.     }  
  23.   
  24.   
  25.     public Object getItem(int position) {  
  26.         return data.get(position);  
  27.     }  
  28.   
  29.   
  30.     public long getItemId(int position) {  
  31.         return position;  
  32.     }  
  33.   
  34.   
  35.     public View getView(int position, View convertView, ViewGroup parent) {  
  36.           ZuJian zuJian = null;   
  37.         if (convertView == null){  
  38.               zuJian = new ZuJian();   
  39.               // 获取组件布局   
  40.                 convertView = layoutInflater.inflate(R.layout.item, null);   
  41.                 zuJian.dnaci1 = (TextView) convertView.findViewById(R.id.tv_wordbreeak_danci);   
  42.                 zuJian.button = (Button) convertView.findViewById(R.id.bt_wordbreak_xiangxi);    
  43.                 
  44.                 // 这里要注意,是使用的tag来存储数据的。   
  45.                 convertView.setTag(zuJian);   
  46.         }else{  
  47.             zuJian = (ZuJian) convertView.getTag();  
  48.         }  
  49.         // 绑定数据、以及事件触发  。可以根据不同的条目添加不同的文字。  
  50.         switch(position){  
  51.         case 0:  
  52.              zuJian.dnaci1.setText((String)data.get(position).get("danci1"));    
  53.             break;  
  54.         case 1:  
  55.             zuJian.dnaci1.setText((String)data.get(position).get("danci1_3"));    
  56.             break;  
  57.         case 2:  
  58.             zuJian.dnaci1.setText((String)data.get(position).get("danci1_2"));   
  59.             break;  
  60.         case 3:  
  61.             zuJian.dnaci1.setText((String)data.get(position).get("danci1_2"));    
  62.             break;  
  63.         case 4:  
  64.             zuJian.dnaci1.setText((String)data.get(position).get("danci1"));   
  65.             break;  
  66.         }  
  67.         zuJian.button.setOnClickListener(new OnClickListener() {   
  68.             public void onClick(View v) {   
  69.                 //点击事件。  
  70.             }  
  71.         });   
  72.           
  73.         return convertView;  
  74.     }  
  75.   
  76.   
  77. }</pre><br>  
  78. <br>  
  79. <pre></pre>  
  80. <p><br>  
  81. </p>  
  82. 适配器文件2<br>  
  83. <pre name="code" class="java">MyAdapter2.java  
  84. /** 
  85.  * 这是第二个适配器 
  86.  * @author Administrator 
  87.  * 
  88.  */  
  89. public class MyAdapter2 extends BaseAdapter{   
  90.   
  91.      private ArrayList<HashMap<String, Object>> data2;   
  92.      private LayoutInflater layoutInflater;   
  93.      private Context context;  
  94.        
  95.        
  96.     public MyAdapter2(Context  context, ArrayList<HashMap<String, Object>> data2) {  
  97.         this.context = context;  
  98.         this.data2 = data2;  
  99.         this.layoutInflater = LayoutInflater.from(context);   
  100.     }  
  101.   
  102.     @Override  
  103.     public int getCount() {  
  104.         return data2.size();  
  105.     }  
  106.   
  107.     @Override  
  108.     public Object getItem(int position) {  
  109.         return data2.get(position);  
  110.     }  
  111.   
  112.     @Override  
  113.     public long getItemId(int position) {  
  114.         return position;  
  115.     }  
  116.   
  117.     public View getView(int position, View convertView, ViewGroup parent) {  
  118.           ZuJian zuJian = null;   
  119.             if (convertView == null){  
  120.                   zuJian = new ZuJian();   
  121.                   // 获取组件布局   
  122.                     convertView = layoutInflater.inflate(R.layout.item_2, null);   
  123.                     zuJian.tv_1 = (TextView) convertView.findViewById(R.id.tv_1);   
  124.                     zuJian.tv_2 = (TextView) convertView.findViewById(R.id.tv_2);   
  125.                     zuJian.tv_3 = (TextView) convertView.findViewById(R.id.tv_3);    
  126.                     
  127.                     // 这里要注意,是使用的tag来存储数据的。   
  128.                     convertView.setTag(zuJian);   
  129.             }else{  
  130.                 zuJian = (ZuJian) convertView.getTag();  
  131.             }  
  132.               
  133.              /*获取map中对应的数据的数据,然后显示在ListView中*/  
  134.              zuJian.tv_1.setText((String)data2.get(position).get("tv_1"));    
  135.              zuJian.tv_2.setText((String)data2.get(position).get("tv_2"));    
  136.              zuJian.tv_3.setText((String)data2.get(position).get("tv_3"));     
  137.                
  138.         return convertView;  
  139.     }  
  140.   
  141. }</pre><br>  
  142. <pre name="code" class="java">ZuJian.java  
  143.   
  144. public class ZuJian {  
  145.       public TextView dnaci1;   
  146.       public TextView danci2;   
  147.       public Button button;   
  148.         
  149.       public TextView dnaci1_2;   
  150.       public TextView danci2_2;   
  151.       public Button button_2;   
  152.         
  153.       public TextView tv_1;   
  154.       public TextView tv_2;   
  155.       public TextView tv_3;   
  156. }</pre><br>  
  157. <br>  
  158.      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值