0

以下は、私の CursorAdapter の bindView() のコードです。

中央のセクション全体では、イメージの 1 つに識別子を設定しています。これにより、ImageLoader (怠惰なイメージ ローダー) がそのデータを、既に正しいデータにバインドされているビューに再バインドできなくなります。

その行のデータが同じままである場合、notifyDataChanged()の後の行で、ListViewがbindViewを要求しないことを期待していました。

この問題について考えると、アダプターはスキップする前にデータの等価性を判断する方法を提供する必要があると思いますが、ソース コードを見ると、getItem と getItemId はこの目的には使用されていません。

不必要にハックなことをしていますか、それともこれは一般的な最適化ですか?

   @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);
    }
4

0 に答える 0