Android listView 中嵌套不同的item

在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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章