2012-06-14 63 views
1

我實現了一個ExapndableListView(和問題是關於ListView的非常通用的)。Android的ListView的性能 - 怪異分配

我已經添加該簡化的代碼示例(沒有怎麼把問題的其它視圖是相同的,而不它們)。

的問題是,當我滾動,還有一些分配,我無法理解。 對於我滾動時呈現的前10-20個新細胞(大約),分配3-4 MB + - 對於其餘細胞,大約每20個細胞需要1 MB。

據我所知加載列表後,它應該不分配任何東西,只是重複使用相應的單元格。

public View getChildView(int groupPosition, int childPosition, boolean isLastChild, 
     View convertView, ViewGroup parent) { 

    EventListItem object = (EventListItem) sections.get(groupPosition) 
               .getItemAtIndex(childPosition); 

    ViewHolder holder; 
    if (hView == null) { 
     hView = mInflater.inflate(R.layout.popularity_row, null); 
     holder = new ViewHolder(); 
     holder.title = (TextView) hView.findViewById(R.id.label); 
     convertView.setTag(holder); 
    } 
    else { 
     holder = (ViewHolder) hView.getTag(); 
    } 
    holder.id = object.getId(); 

    holder.title.setText(object.getTitle()); 

    return convertView; 
} 

static class ViewHolder { 
    String  id; 
} 

可能是什麼問題? 當我滾動時它可以分配什麼?

非常感謝。

回答

2

其一,取出線View hView = convertView;,只是使用convertView的功能。你在那裏創建的鏈接是無用的。

以外,你不應該在這裏擔心的分配。 ListView爲你做了很多優化,可能會使用/釋放對象很多。

+0

謝謝,但什麼優化可以採取這樣的內存量?列表需要6-8 MB是否合理? –

+0

取決於您用於列表的模型。 'EventListItem object =(EventListItem)sections.get(groupPosition).getItemAtIndex(childPosition);''可能導致你的記憶力上升。您發佈的代碼正確地實現了該功能,但也許問題在其他地方? –

+0

它只是從一些數據結構中獲取對象......沒有分配任何東西.. –