Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> [Android學習]ListView顯示多種item的處理辦法

[Android學習]ListView顯示多種item的處理辦法

編輯:關於Android編程

在平常使用ListView的時候,通常我們使用的item的layout都是同一個。當需要有多個不同的item的layout時,有兩中處理的辦法。

第一種方法: 重寫getView()方法

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    int type=listDatas.get(position);
    switch(type)
    {
        case 1:
            convertView = inflater.inflate(R.layout.item1, null);
        break;
        case 2:
             convertView = inflater.inflate(R.layout.item2, null);
        break;
        ...
    }
    return convertView;
}

缺點:
無法重用convertView,每次都會重新創建新的view。在item數目非常多的時候,很容易會造成OOM和ListView滑動卡頓。

第二種方法: 其實Adapter和ListView早就為我們准備好處理這種情況的方法:getViewTypeCount()getItemViewType()getViewTypeCount():返回不同種item的數目,getItemViewType():返回的item類別的唯一標識,標識可以自己確定。
我們需要重寫getViewTypeCount()getItemViewType()getView()方法。假設我們在偶數時顯示item1,奇數時顯示item2.

@Override
public int getViewTypeCount()
{
    return 2;
}
@Override
public int getItemViewType(int position)
{
    return position%2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    int type = getItemViewType(position);

    if(convertView==null)
    {
        switch(type)
        {
            case 0:
            convertView = inflater.inflate(R.layout.item1, null);
            break;
            case 1:
            convertView = inflater.inflate(R.layout.item2, null);
            break;
            default:
            convertView = inflater.inflate(R.layout.default_item, null);
            break;
        }
    }
    // 綁定數據
    switch(type)
    {
        case 0:
        ...
        break;
        case 1:
        ...
        break;
        default:
        ...
        break;
    }
    return convertView;
}

優點:
多個item的convertView會被重用。這種做法在其他地方也有很好的用處,比如,ListView的優化上,對於ListView的包含的item較大時,我們可以對item切片分塊來加載,這樣就需要顯示多種item,正好就可以使用這種做法。

   
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved