較短的版本:
請閱讀@Alex洛克伍德的和@截拳道的答案。
我的回答:
爲什麼之前,這是更好/使用getView()
convertView
的正確方法是什麼?由羅曼蓋伊在這video很好解釋。
的例如,
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View rowView = convertView;
ViewHolder holderObject;
if (rowView == null) {
rowView = inflater.inflate(R.layout.list_single_post_or_comment, parent, false);
holderObject = new HolderForContent();
mapHolder(holderObject, rowView);
rowView.setTag(holderObject);
} else {
holderObject = (HolderForContent) convertView.getTag();
}
setHolderValues(holderObject, position);
return rowView;
}
private class ViewHolder {
TextView mTextView;
}
mapHolder(holderObject, rowView) {
//assume R.id.mTextView exists
holderObject.mTextView = rowView.findViewById(R.id.mTextView);
}
setHolderValues(holderObject, position) {
//assume this arrayList exists
String mString = arrayList.get(position).mTextViewContent;
holderObject.mTextView.setText(mString);
}
上面只是一個例子,你可以按照任何類型的模式。但是記住這個,
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
// todo : inflate rowView. Map view in xml.
} else {
// todo : get already defined view references
}
// todo : set data to display
return rowView;
}
現在來目的convertView
。 爲什麼?
convertView
用於性能優化 [在滑塊14 see圖表由羅曼蓋伊]通過不重新創建一個已創建的圖。
來源: 歡迎任何更正。我實際上通過這些鏈接收集了這些信息,
閱讀關於getView()
Android developer documentation。
Romain Guy談到getView()
在video「Turbo Charge Your UI」在Google IO 2009和material用於演示。
Lucas Rocha的精彩blog。
那些想深入研究源代碼的人:ListView和getView()
的示例implementation可以在arrayAdapter的源代碼中看到。
相似的SO帖子。
how-do-i-choose-convertview-to-reuse
how-does-the-getview-method-work-when-creating-your-own-custom-adapter
來源
2016-09-21 17:36:58
tpk
所以,我應該使用convertView如果我建我的看法沒有充氣XML文件? –
@DanChaltiel是的,你做 – localhost