使用 ViewHolder 模式儲存檢視查詢
特別是在 ListView 中,你可以通過在滾動期間執行太多 findViewById() 呼叫來遇到效能問題。通過使用 ViewHolder 模式,你可以儲存這些查詢並提高你的 ListView 效能。
如果你的列表項包含單個 TextView,請建立一個 ViewHolder 類來儲存例項:
static class ViewHolder {
TextView myTextView;
}
在建立列表項時,將 ViewHolder 物件附加到列表項:
public View getView(int position, View convertView, ViewGroup parent) {
Item i = getItem(position);
if(convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
// Create a new ViewHolder and save the TextView instance
ViewHolder holder = new ViewHolder();
holder.myTextView = (TextView)convertView.findViewById(R.id.my_text_view);
convertView.setTag(holder);
}
// Retrieve the ViewHolder and use the TextView
ViewHolder holder = (ViewHolder)convertView.getTag();
holder.myTextView.setText(i.getText());
return convertView;
}
使用這種模式,只有在建立新的 View 時才會呼叫 findViewById(),並且 ListView 可以更有效地回收你的檢視。