BaseAdapter
adpater.notifyDatasetChanged()
。listView.setSelection(50)
但是,我的问题是android正在为所有100行重新创建视图。
但我只想从0 - 50
中抽取新 50行如果我有1000行,UI将非常慢。
是否可以绘制部分行?
答案 0 :(得分:0)
您应该在适配器中实现视图持有者模式。以下是我的一个实现此模式的应用程序的Adapter.getView
方法示例:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
final LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(R.layout.list_item_feeling, parent, false);
viewHolder = new ViewHolder();
viewHolder.imageViewFeeling = (ImageView) convertView.findViewById(R.id.imageview_feeling);
viewHolder.textViewFeeling = (TextView) convertView.findViewById(R.id.textview_feeling);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
final Feeling feeling = getItem(position);
viewHolder.imageViewFeeling.setImageResource(feeling.getDrawable());
viewHolder.textViewFeeling.setText(feeling.getLabel());
return convertView;
}
ViewHolder类很简单,只保存对视图的引用:
private static class ViewHolder {
ImageView imageViewFeeling;
TextView textViewFeeling;
}
我们的想法是,inflate
和findViewById
方法很重,如果您已经有View
,则无需重新创建它。
您也可以考虑将ListView
替换为强制视图持有者模式的RecyclerView
。