如何使 android listView 只重绘新插入的行

how to make android listView redrawing only newly inserted rows

但是,我的问题是 android 正在为所有 100 行重新创建视图。

但我只想从 0 - 50

中抽取 new 50 行

如果我有 1000 行,UI 会很慢。

是否可以绘制部分行?

您应该在适配器中实现视图持有者模式。这是我的一个实现此模式的应用程序中的 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 class 很简单,只包含对视图的引用:

private static class ViewHolder {
    ImageView imageViewFeeling;
    TextView textViewFeeling;
}

想法是 inflatefindViewById 方法很重,如果您已经有一个 View 就没有必要重新创建它。

您也可以考虑将 ListView 替换为 RecyclerView,这会强制使用视图持有者模式。