在listview中嵌套不同的item,就要使用不同的ItmeHolder,根據要顯示的不同來保存不同的itemholder (setTag)。
Listview中有3種Item佈局,即使convertView緩存了一些佈局,但是在重構時,根本不知道怎麼樣去讓convertView返回你所需要的佈局,這時你需要讓adapter知道我當前有哪些佈局,我重構Item時的佈局選取規則,好讓convertView能返回你需要的佈局需要重寫一下兩個函數
@Override
public int getItemViewType(int position) {}
根據position來返回不同的int數據,從而加載不同的緩存佈局
@Override
public int getViewTypeCount() {}
返回一共有多少種緩存佈局的數量。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//三種itemHolder
viewHolder1 holder1 = null;
viewHolder2 holder2 = null;
viewHolder3 holder3 = null;
//根據位置,判斷是那種itemholder
**int type = getItemViewType(position);**
//無convertView,需要new出各個控件
if(convertView == null)
{
//按當前所需的樣式,確定new的佈局
switch(type)
{
case TYPE_1:
convertView = inflater.inflate(R.layout.listitem1, parent, false);
holder1 = new viewHolder1();
holder1.textView = (TextView)convertView.findViewById(R.id.textview1);
holder1.checkBox = (CheckBox)convertView.findViewById(R.id.checkbox);
Log.e("convertView = ", "NULL TYPE_1");
convertView.setTag(holder1);
break;
case TYPE_2:
convertView = inflater.inflate(R.layout.listitem2, parent, false);
holder2 = new viewHolder2();
holder2.textView = (TextView)convertView.findViewById(R.id.textview2);
Log.e("convertView = ", "NULL TYPE_2");
convertView.setTag(holder2);
break;
case TYPE_3:
convertView = inflater.inflate(R.layout.listitem3, parent, false);
holder3 = new viewHolder3();
holder3.textView = (TextView)convertView.findViewById(R.id.textview3);
holder3.imageView = (ImageView)convertView.findViewById(R.id.imageview);
convertView.setTag(holder3);
break;
}
}
else
{
//有convertView,按樣式,取得不用的佈局
switch(type)
{
case TYPE_1:
holder1 = (viewHolder1) convertView.getTag();
break;
case TYPE_2:
holder2 = (viewHolder2) convertView.getTag();
break;
case TYPE_3:
holder3 = (viewHolder3) convertView.getTag();
break;
}
}
//根據不同的type,爲各個界面設置資源
switch(type)
{
case TYPE_1:
holder1.textView.setText(Integer.toString(position));
holder1.checkBox.setChecked(true);
break;
case TYPE_2:
holder2.textView.setText(Integer.toString(position));
break;
case TYPE_3:
holder3.textView.setText(Integer.toString(position));
holder3.imageView.setBackgroundResource(R.drawable.icon);
break;
}
return convertView;
}