0

こんにちは、画像ビューをスクロールすると、位置と背景画像が変わると、この種の問題が発生します。このサイトでこのトピックに関する他の回答を見ましたが、どれも役に立ちませんでした。

このように一度: グリッド ビューのスクロールの 問題 Android での GridView のスクロール の問題

および他の多くの...しかし、それらは私の問題を解決しません。

重要なことは、gridview または gridview アイテム (imageViews) にカスタム レイアウトを使用しないことです。プログラムで作成します。これは私にとって非常に重要なので、誰かが答えを知っていれば、助けてください...ありがとう。

public View getView(int position, View convertView, ViewGroup parent) {
    if(convertView==null){
        imageView = new ImageView(ctx);
    } else {
        imageView = (ImageView) convertView;
    }
        imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(8, 8, 8, 8);
        imageView.setBackgroundResource(tmp[position]);
        imageView.setImageResource(blank);

    return imageView;
}
4

2 に答える 2

1

その簡単な方法です。アダプターは、スクロール中にすべてのビューをリサイクルします。したがって、最初に再利用されるものを作成する必要があります。ホルダーは、findViewById のような高価な呼び出しを回避し、古いアイテムを取得してそのプロパティを変更するだけでアイテムを再利用するのに役立ちます。

覚えておく必要がある 1 つのポイントは、array[] や List などのコンテナーのいずれかに表示されるイメージを保持し、ビューを返す前に毎回リセットする必要があることです。リサイクルビュー。

public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub

            LayoutInflater inflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            if (convertView == null) {
                convertView = inflater.inflate(R.layout.item_layout, null);
                holder = new ViewHolder();
                holder.cover = (ImageView) convertView
                        .findViewById(R.id.item_cover);
                convertView.setTag(holder);

            } else {
                holder = (ViewHolder) convertView.getTag();

            }

        holder.cover.setBackgroundResource(tmp[position]);

        return convertView ;
    }

    static class ViewHolder {
        ImageView cover;
    }
于 2014-02-24T11:20:29.623 に答える
0

これを試して

 class Holder {
     ImageView imageView;
 }

 public View getView(int position, View convertView, ViewGroup parent) {
 Holder holder;
if(holder.imageView==null){
    holder=new Holder();
    holder.imageView = new ImageView(ctx);
    holder.imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
    holder.imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    holder.imageView.setPadding(8, 8, 8, 8);
    imageView.setTag(holder);
 } else {
    holder= (Holder) imageView.getTag();
 }

     holder.imageView.setBackgroundResource(tmp[position]);
     holder.imageView.setImageResource(blank);

 return imageView;
}
于 2013-08-13T04:23:24.240 に答える