Android为ListView的Item设置不同的布局

MainActivity如下:

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设置布局
 
  * 参考资料:
  *   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如下:
 
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
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; 
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序邦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值