android listview多种布局 getViewTypeCount和getItemViewType

一般listview都是一种样式,但如果出现 多种样式 ,类似于这一条item是 文字 下一条是图片 在下一条是文字加图片,也许你会说 那就在那就在一个xml文件里面写三者样式呗。那如果是 一百个呢。。哇。。这维护起来 可是个大工程,我可不想加班。


先上图片看看样子:两种样式     只为了为了说明问题


那么方法来了,使用getViewTypeCount和getItemViewType

getViewTypeCount 方法返回的是 你有几种样式  返回时是 int类型

getItemViewType 返回值 是你某一种样式 的类型 是什么。。返回值也是  int类型 ,意思是  代表 A类型的 是 数字 1.。。就是这意思

两个方法很简单呢 直接上代码,基本没什么特别的,就是加了两个方法而已 

[java] view plain copy
  1. package com.org.mmp.Play;  
  2.   
  3. import java.util.List;  
  4.   
  5. import com.org.mmp.R;  
  6.   
  7. import android.content.Context;  
  8. import android.view.LayoutInflater;  
  9. import android.view.View;  
  10. import android.view.ViewGroup;  
  11. import android.widget.BaseAdapter;  
  12. import android.widget.ImageView;  
  13. import android.widget.TextView;  
  14.   
  15. public class PlayAdapter extends BaseAdapter {  
  16.     /** 
  17.      * 标题的item 
  18.      */  
  19.     public static final int ITEM_TITLE = 0;  
  20.     /** 
  21.      * 二级菜单的item 
  22.      */  
  23.     public static final int ITEM_INTRODUCE = 1;  
  24.     private List<ViewItem> mList;  
  25.     private Context context;  
  26.   
  27.     private LayoutInflater inflater;  
  28.   
  29.     // 两个样式 两个holder。100就写100holder。。当然你何以把他抽离出来这里先只为了说明问题  
  30.     class Holder1 {  
  31.         TextView play_title;  
  32.   
  33.         Holder1(View view) {  
  34.             play_title = (TextView) view.findViewById(R.id.play_title);  
  35.         }  
  36.   
  37.     }  
  38.   
  39.     class Holder2 {  
  40.         TextView play_introduce_title;  
  41.         ImageView play_iv;  
  42.   
  43.         Holder2(View view) {  
  44.             play_introduce_title = (TextView) view  
  45.                     .findViewById(R.id.play_introduce_title);  
  46.             play_iv = (ImageView) view.findViewById(R.id.play_iv);  
  47.         }  
  48.     }  
  49.   
  50.     public PlayAdapter(Context context, List<ViewItem> mList) {  
  51.         this.context = context;  
  52.         this.mList = mList;  
  53.         inflater = LayoutInflater.from(context);  
  54.     }  
  55.   
  56.     @Override  
  57.     public int getCount() {  
  58.         // TODO Auto-generated method stub  
  59.         System.out.println("mList.size()" + mList.size());  
  60.         return mList.size();  
  61.     }  
  62.   
  63.     @Override  
  64.     public Object getItem(int arg0) {  
  65.         // TODO Auto-generated method stub  
  66.         return mList.get(arg0);  
  67.     }  
  68.     //返回 代表某一个样式 的 数值    
  69.     @Override  
  70.     public int getItemViewType(int position) {  
  71.         // TODO Auto-generated method stub  
  72.         return mList.get(position).type;  
  73.     }  
  74.   
  75.     //两个样式 返回2  
  76.     @Override  
  77.     public int getViewTypeCount() {  
  78.         // TODO Auto-generated method stub  
  79.         return 2;  
  80.     }  
  81.   
  82.     @Override  
  83.     public long getItemId(int arg0) {  
  84.         // TODO Auto-generated method stub  
  85.         return arg0;  
  86.     }  
  87.   
  88.     @Override  
  89.     public View getView(int position, View convertView, ViewGroup parent) {  
  90.         int type = getItemViewType(position);  
  91.   
  92.         Holder1 holder1 = null;  
  93.         Holder2 holder2 = null;  
  94.         System.out.println("getView " + position + " " + convertView  
  95.                 + " type = " + type);  
  96.         if (convertView == null) {  
  97.             //选择某一个样式。。  
  98.             switch (type) {  
  99.             case ITEM_TITLE:  
  100.                 convertView = inflater.inflate(R.layout.play_item_title, null);  
  101.                 holder1 = new Holder1(convertView);  
  102.   
  103.                 holder1.play_title.setText(mList.get(position).name);  
  104.   
  105.                 convertView.setTag(holder1);  
  106.                 break;  
  107.             case ITEM_INTRODUCE:  
  108.                 convertView = inflater.inflate(R.layout.paly_item_introduce,  
  109.                         null);  
  110.                 holder2 = new Holder2(convertView);  
  111.   
  112.                 holder2.play_introduce_title  
  113.                         .setText(mList.get(position).address);  
  114.                 convertView.setTag(holder2);  
  115.                 break;  
  116.             default:  
  117.                 break;  
  118.             }  
  119.         } else {  
  120.             switch (type) {  
  121.             case ITEM_TITLE:  
  122.                 holder1 = (Holder1) convertView.getTag();  
  123.                 holder1.play_title.setText(mList.get(position).name);  
  124.                 break;  
  125.             case ITEM_INTRODUCE:  
  126.                 holder2 = (Holder2) convertView.getTag();  
  127.                 holder2.play_introduce_title  
  128.                         .setText(mList.get(position).address);  
  129.                 break;  
  130.   
  131.             default:  
  132.                 break;  
  133.             }  
  134.   
  135.         }  
  136.   
  137.         return convertView;  
  138.     }  
  139.   
  140. }  
代码位置

点击打开链接

posted on 2016-02-17 21:34  猪猪一号  阅读(219)  评论(0编辑  收藏  举报

导航