2013-08-29 66 views
0

我在SOF閱讀了許多關於CursorAdaptor的文章 - newView/getView/bindView。Android CursorAdapter getView/newView應該是膨脹一樣的東西嗎?

如果我爲自動完成文本字段創建自定義適配器,我必須實現newView()和bindView()。

但有人說,實現getView()可以提高滾動時的速度。

所以,問題是,

如果上NewView的(),已膨脹的圖。

public View newView(Context context, Cursor cursor, ViewGroup parent) { 
    final LayoutInflater inflater = LayoutInflater.from(context); 
    // =Single Line= 
    final TextView view = (TextView) inflater.inflate(android.R.layout.simple_list_item_1, parent, false); 
    String item = createItem(cursor); 
    view.setText(item);  
    return view; 
} 

所以在getView()上,我做了同樣的事情嗎?

+0

誰是「某人」?資源? – njzk2

+0

'view.setText(item);'應該在bindView中,而不是newView(同樣,看代碼中的getCursorAdapter中的getView會調用newView(如果需要)和bindView之後) – njzk2

回答

4

實現getView()newView()/bindView()組在性能方面是一樣的,您應該選擇更高版本的選項。對於基於Cursor的適配器,執行getView()方法時,將使用視圖回收機制,並將行構造委派給newView()(構建行的視圖)和bindView()(將數據綁定到行)方法。它也將Cursor移動到正確的位置。

另外,正如njzk2所指出的,您應該在bindView()方法中的視圖上設置數據。 newView()方法將不會被調用ListView的每一行,它只會被調用的情況下,當沒有可用的回收行時,這就是爲什麼您應該只有建立在newView()行視圖。但是,每次都會調用bindView()方法,這裏應該將Cursor中的數據綁定到行視圖。

+0

如果它回收行,是否意味着我們不' t需要實現ViewHolder模式嗎? –

+1

@IgorGanapolsky基於光標的適配器已經實現了回收機制,但是他們並沒有實現持有者模式來避免在數據綁定時直接查看視圖,如果你想爲' ListView',那麼你應該在'newView()'方法中自己實現持有者模式。 – Luksprog