package cc.testlistview; 
import java.util.ArrayList; 
import java.util.HashMap; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListView; 
import android.app.Activity; 
/**
  * Demo描述:
  * 为ListView的Item设置不同的布局.
  * 例如在该例子中ListView的第一个Item显示一张
  * 图片,其余的Item都显示文字.
  * 
  * 为了达到此目的需要重写BaseAdapter中的
  * 1 getViewTypeCount()和getItemViewType(int position)方法.
  *   1.1在getViewTypeCount中指定一共有几种不同的item
  *      在此返回2即可.
  *   1.2在getItemViewType(int position)中需要依据position的不同
  *      返回不同的Type.
  * 2 在getView()方法中针对不同的Type为Item设置布局
  *   2.1得到当前位置(position)时的Type即代码:
  *       currentType= getItemViewType(position);
  *   2.2依据Type的不同为Item设置布局
  * 
  * 参考资料:
  * 1 http://blog.csdn.net/yueyue369/article/details/6115552
  * 2 http://blog.sina.com.cn/s/blog_5da93c8f0100wx4v.html
  *   Thank you very much
  */ 
public class MainActivity extends Activity { 
     private ListView mListView; 
     private HashMap<String, Object> mHashMap; 
     private ArrayList<HashMap<String, Object>> mArrayList; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
         super .onCreate(savedInstanceState); 
         setContentView(R.layout.main); 
         init(); 
     } 
     private void init(){ 
         mArrayList= new ArrayList<HashMap<String,Object>>(); 
         mListView=(ListView) findViewById(R.id.listview); 
         addDataForListView(); 
         mListView.setAdapter 
         ( new ListViewAdapter(MainActivity. this , mArrayList, R.layout.othersitem, new String []{ "content" }, new int []{R.id.textView})); 
         mListView.setOnItemClickListener( new ItemClickListenerImpl()); 
     } 
     private void addDataForListView(){ 
         for ( int i = 0 ; i < 30 ; i++) { 
             mHashMap= new HashMap<String, Object>(); 
             mHashMap.put( "content" , "This is ---> " +i); 
             mArrayList.add(mHashMap); 
         } 
     } 
   
     private class ItemClickListenerImpl implements OnItemClickListener { 
         @Override 
         public void onItemClick(AdapterView<?> parent, View view, int position, long arg) { 
             System.out.println( "OnItemClickListener position=" +position); 
   
         } 
     } 
}



 



 



ListViewAdapter如下:



?


package cc.testlistview; 
import java.util.List; 
import java.util.Map; 
import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 
   
public class ListViewAdapter extends BaseAdapter { 
     private List<? extends Map<String, ?>> mArrayList; 
     private int resource; 
     private LayoutInflater mLayoutInflater; 
       
     private final int TYPE_COUNT= 2 ; 
     private final int FIRST_TYPE= 0 ; 
     private final int OTHERS_TYPE= 1 ; 
     private int currentType; 
     public ListViewAdapter(Context context,List<? extends Map<String, ?>> data, int resource, String[] from, int [] to) { 
         this .mArrayList=data; 
         this .resource=resource; 
         mLayoutInflater=(LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
     } 
       
     @Override 
     public int getCount() { 
         if (mArrayList== null ) { 
             return 0 ; 
         } else { 
             return (mArrayList.size()+ 1 ); 
         } 
           
     } 
       
     @Override 
     public Object getItem( int position) { 
         if (mArrayList== null ) { 
             return null ; 
         } else { 
             if (position> 0 ) { 
                 return mArrayList.get(position- 1 ); 
             } else { 
                 return mArrayList.get(position+ 1 ); 
             } 
         } 
     } 
       
     @Override 
     public long getItemId( int position) { 
         return position; 
     } 
       
     /// 
     @Override 
     public int getViewTypeCount() { 
         return TYPE_COUNT; 
     } 
       
     @Override 
     public int getItemViewType( int position) { 
         if (position== 0 ) { 
             return FIRST_TYPE; 
         } else { 
             return OTHERS_TYPE; 
         } 
     } 
    /// 
       
     @Override 
     public View getView( int position, View convertView, ViewGroup parent) { 
         View firstItemView = null ; 
         View othersItemView= null ; 
         //获取到当前位置所对应的Type 
         currentType= getItemViewType(position); 
         System.out.println( "type=" +currentType); 
         if (currentType== FIRST_TYPE) { 
             firstItemView = convertView; 
             FirstItemViewHolder firstItemViewHolder= null ; 
             if (firstItemView== null ) { 
                 System.out.println( "firstItemView==null " ); 
                 firstItemView = mLayoutInflater.inflate(R.layout.firstitem, null ); 
                 firstItemView.setOnClickListener( new OnClickListener() { 
                     @Override 
                     public void onClick(View view) { 
                         System.out.println( "=====click first item=======" ); 
                     } 
                 }); 
                 firstItemViewHolder= new FirstItemViewHolder(); 
                 firstItemViewHolder.imageView=(ImageView) firstItemView.findViewById(R.id.imageView); 
                 firstItemView.setTag(firstItemViewHolder); 
   
             } else { 
                 System.out.println( "firstItemView!=null " ); 
                 System.out.println( "111 getClass=" +firstItemView.getTag().getClass().toString()); 
                 firstItemViewHolder=(FirstItemViewHolder) firstItemView.getTag(); 
             } 
               
             if (firstItemViewHolder.imageView!= null ) { 
                 firstItemViewHolder.imageView.setImageResource(R.drawable.ic_launcher); 
             } 
               
             convertView=firstItemView; 
   
         } else { 
             othersItemView = convertView; 
             OthersViewHolder othersViewHolder= null ; 
             if (othersItemView== null ) { 
                 System.out.println( "othersItemView==null " ); 
                 othersItemView = mLayoutInflater.inflate(R.layout.othersitem, null ); 
                 othersViewHolder= new OthersViewHolder(); 
                 othersViewHolder.textView=(TextView) othersItemView.findViewById(R.id.textView); 
                 othersItemView.setTag(othersViewHolder); 
             } else { 
                 System.out.println( "othersItemView!=null " ); 
                 System.out.println( "222 getClass=" +othersItemView.getTag().getClass().toString()); 
                 othersViewHolder=(OthersViewHolder) othersItemView.getTag(); 
             } 
               
             if (mArrayList!= null ) { 
                 if (othersViewHolder.textView!= null ) { 
                     othersViewHolder.textView.setText((String)(mArrayList.get(position- 1 ).get( "content" ))); 
                 } 
                   
             } 
               
             convertView=othersItemView; 
   
         } 
   
         return convertView; 
     } 
       
     
     //第一个Item的ViewHolder 
     private class FirstItemViewHolder{ 
         ImageView imageView; 
     } 
       
     //除第一个Item以外其余Item的ViewHolder 
     private class OthersViewHolder{ 
         TextView textView; 
     } 
}