1

多くの画像で stickyheaders gridview を使用しており、ヘッダーはテキストです。画面には常に 10 ~ 20 枚の画像が表示されます。ビューホルダー パターンを使用してセルを再利用しています。

しかし、多くの場合、セルは再利用されません。なぜでしょうか? さらに、各セルが 2 回呼び出される - なぜですか?

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    Photo photo = getItem(position);
    ViewHolder viewHolder = null;
    if (convertView == null ) {
        Log.d(TAG, "convertview is null :"+position);
        convertView = mInflater.inflate(R.layout.item_photo_grid, parent, false);
        viewHolder = new ViewHolder();
        viewHolder.imageView = (ImageView) convertView.findViewById(R.id.photo);
        viewHolder.selected = convertView.findViewById(R.id.selected);
        convertView.setTag(viewHolder);
    }
    else {
        Log.d(TAG, "convertview is resused :"+position);
        viewHolder = (ViewHolder) convertView.getTag();
    }
    frameLoader.pauseOnFling(isFlinging);
    frameLoader.pauseOnScroll(isScrolling);
    frameLoader.setMaxItems(getVisiblePhotoCount());
    frameLoader.displaySmallImage(photo, viewHolder.imageView);
    if (mSelectedItems.contains(photo)) {
        viewHolder.selected.setVisibility(View.VISIBLE);
    } 
    else {
        viewHolder.selected.setVisibility(View.GONE);
    }

    return convertView;
}

ログ出力は次のようになります。

ここに画像の説明を入力してください

4

1 に答える 1

0

GridViewビューを使用して、現在のビューポートの下または上に再利用されたビューを追加し続け、スクロール中recyclerにアクティブなビューを移動しますrecyclable pooloff-screencodeこのように、GridView はenough views in memory、アダプターに何百ものアイテムがある場合でも、レイアウト内の割り当てられたスペースといくつかの追加の再利用可能なビューを埋めるために保持するだけで済みます。ビューポートの状態に応じて、上から、下からなど、さまざまな方法でスペースを行で埋めます。下の画像は、GridView を下にパンしたときに何が起こるかを視覚的にまとめたものです。

ここに画像の説明を入力

再利用できるビューがない場合、Android は convertView パラメータに null を渡します。

于 2013-09-24T08:44:20.777 に答える