6

調用getView()我有一個ListView這顯示每一行從互聯網上的圖像被拉入,和一個字符串。的Android - ListView控件 - 按需

一般來說它工作正常。但是,我想在視圖(行)膨脹時的方式上進行控制。默認情況下,當該行可見時,將調用適配器的getView()方法。

這當然不是最好的行爲之一,因爲如果我有幾百記錄ListView,我需要達到底部的那些,在滾動的ListView,該getView()方法將被調用爲每直到我到達頁腳。

所以我只想滾動後調用getView和ListView控件是暫停/空閒狀態,但我不知道如何去了解這一點:

下面是我開始:

listView.setOnScrollListener(new OnScrollListener() { 
    @Override 
    public void onScrollStateChanged(AbsListView view, int scrollState) { 
     if(scrollState==SCROLL_STATE_IDLE){ 
      // Invoke get view only on visible items 
     } 
    } 

    @Override 
    public void onScroll(AbsListView view, int firstVisibleItem, 
      int visibleItemCount, int totalItemCount) { 

    } 
}); 

這是我的適配器的getView:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder holder; 

    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.row, parent, false); 

     holder = new ViewHolder(); 
     holder.title = (TextView) convertView.findViewById(R.id.textView); 
     holder.image = (ImageView) convertView.findViewById(R.id.imageView); 
     holder.position = position; 

     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 


    holder.title.setText(data.get(position).getTitle()); 
    holder.image.setImageResource(R.drawable.ic_launcher); 
    new LoadImageAsync(data.get(position).getUrl(), holder.image).execute(); 

    return convertView; 
} 

請給我我應該在哪裏看,以實現一些方向:只有在滾動後調用getView(),只爲visib樂的項目。

+1

檢查ApiDemos,部分高效適配器 – 2012-08-07 14:07:55

+0

@TomislavNovoselec,謝謝你的提示。這是值得反思的。 – 2012-08-07 14:13:56

回答

4

我最近看了這個文章... here。我沒有嘗試過,但它似乎是一個合理的理論。

基本上,他們主張將您用來追蹤無論您是滾動與否和使用,作爲您的適配器標誌的布爾。如果布爾值爲true(正在滾動),則只能在佈局中繪製文字視圖。如果爲false(您已停止滾動),則繪製所有內容。

你告訴適配器重繪可見視圖時不使用notifyDataSetChanged()滾動。

+0

感謝您的鏈接。該文章結合API演示中的示例幫助我實現了自己的目標。現在我有了最聰明的適配器。 :) – 2012-08-07 15:22:50

+0

謝謝,在aysnchronous調用中添加其他項目後調用notifyDataSetChanged()有幫助! (使用android-查詢) – 2013-08-23 11:33:19