2015-02-09 22 views
1

我有一個ListView本站由CursorAdapter驅動。該ListViewOnScrollListener附:CursorAdapter和滾動:visibleItemCount變得巨大零星

listView.setOnScrollListener(new AbsListView.OnScrollListener() { 
    @Override 
    public void onScrollStateChanged(AbsListView view, int scrollState) { 
    } 

    @Override 
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
     android.util.Log.e("===", "Scrolling: firstVisibleItem:" + firstVisibleItem + ", visibleItemCount:" + visibleItemCount + ", totalItemCount:" + totalItemCount); 
     //some logic here 
    } 
}); 

當我向下滾動,達到列表的新項目是從網上下載的底部,添加到數據庫和CursorAdapter光標更新刷新列表:

adapter.changeCursor(newCursor); //the query for the cursor is always the same, it never changes 

然而,當我向上滾動併到達列表的中間左右時,有時visibleItemCount參數被設置爲遠大於其通常值的值(40與通常的7-8相比)。接下來是短暫的滯後,並且該列表立即移回,接近底部。

我的CursorAdapter是這樣的:

class MyCursorAdapter extends CursorAdapter { 
    //... 
    @Override 
    public View newView(Context context, Cursor cursor, ViewGroup parent) { 
     View view = layoutInflater.inflate(R.layout.my_layout, parent, false); 

     return view; 
    } 

    @Override 
    public void bindView(View view, Context context, Cursor cursor) { 
     populateView(view, cursor); 
    } 

    private void populateView(View view, Cursor cursor) { 
     //... 
     //this does not move the cursor, only reads from it 
    } 
} 

我做錯什麼了嗎?


編輯

問題實際上也不涉及到的CursorAdapter,我曾與一個普通BaseAdapter取代它,問題仍然存在。

回答

1

問題是,列表視圖項目的根元素的layout_height等於wrap_content。當視圖中有很多項目時,這可能會導致列表視圖(或適配器,我不知道)內的一些性能問題。將layout_height更改爲精確值解決了問題(並使列表滾動更順暢):

layout_height="30dp"