在changeCursor上有效使用ListView并避免数据重新绑定?

时间:2013-05-12 12:04:12

标签: android listview android-cursoradapter android-cursor

下面是我的CursorAdapter的bindView()代码。

整个中间部分是我在其中一个图像上设置标识符,这将阻止我的ImageLoader(一个懒惰的图像加载器)将该数据重新绑定到已经与正确数据绑定的视图。

如果该行的数据保持不变,我希望ListView不会在notifyDataChanged()之后的行上请求bindView。

考虑到这个问题,我猜我的适配器必须提供一种在跳过之前确定数据相等性的方法,但是查看源代码时getItem和getItemId不会用于此目的。

我做了一些不必要的hacky,或者这是一个常见的优化?

   @Override
    public void bindView(View view, Context context, Cursor cursor) {
        int position = cursor.getPosition();

        ImageView thumbnailIv = (ImageView) view.getTag(R.id.thumbnail);

        //Do i really need this to avoid unnecessarily rebinding data to this view??
        Integer cellPosition = (Integer)thumbnailIv.getTag();
        if(cellPosition != null && position == cellPosition.intValue()){
            //skip!
            return;
        }

        thumbnailIv.setTag(Integer.valueOf(position));

        Post post = new Post(cursor); //get the data out of the row.

        ImageLoader.getInstance().displayImage(post.getThumbnailUrl(), thumbnailIv);
    }

0 个答案:

没有答案