1

ImageAdapter でグリッド ビューを使用して画像を表示しています。元の画像を含むmThumbIdsと、選択した画像を含むcThumbIdsの 2 つの画像セットがあります。

現在、画像をクリックすると、選択した画像で通常の画像が変更されます。コードは次のとおりです。

final ImageView iv = (ImageView)v.findViewById(R.id.icon_image);
            iv.setOnClickListener(new OnClickListener(){

                @Override
                public void onClick(View arg0) {
                    // TODO Auto-generated method stub
                    //iv.setColorFilter(Color.LTGRAY);
                    iv.setImageResource(cThumbIds[position]);
                    //iv.bringToFront();

                    index= position;

                }

            });

            iv.setImageResource(mThumbIds[position]);

しかし、別の画像をクリックすると、別の画像も選択されているように表示されると問題が発生します。正しい方法は、新しい画像を選択済みとして表示し、古い画像を選択済みとして削除することです。つまり、古い画像は元の画像に戻す必要があります。

これについて私を助けてください

ありがとう、

パンカイ

4

2 に答える 2

3

変数を作成し、クリックした画像の ID をその中に保持する必要があります。ユーザーが他の画像をクリックすると、最初に変数の id に従って他の画像をリセットしてから、変数値を現在クリックされている画像の id に置き換えます。

于 2011-05-24T04:25:34.613 に答える
1

このチュートリアルImageAdapterのクラスの変更されたコピーを使用していて、投稿したコードがそのクラスのメソッドにあると仮定しています。getView(int,View,ViewGroup)

選択した画像のインデックスを保存しますが、ビュー自体は保存しません。古いイメージを元に戻すには、次のように両方を保存する必要があります。

private int selectedPosition = -1;
private ImageView selectedView = null;
...
public View getView(int position, View convertView, ViewGroup parent) {
    // I don't understand what this line is about??
    ImageView iv = (ImageView) v.findViewById(R.id.icon_image);
    // Why not something like this??
    // ImageView iv = new ImageView(mContext);

    iv.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            // Set the selected image for the ImageView just pressed.
            iv.setImageResource(cThumbIds[position]);

            // Revert to the original image for the ImageView previously
            // pressed.
            if (selectedPosition != -1) {
                selectedView.setImageResource(mThumbIds[selectedPosition]);
            }

            // Save the position and ImageView just pressed so it can be
            // reverted next time an ImageView is pressed
            selectedPosition = position;
            selectedView = (ImageView) view;
        }
    });

    iv.setImageResource(mThumbIds[position]);
    return (iv);
}

ただし、この行については少し混乱してImageView iv = (ImageView) v.findViewById(R.id.icon_image);います (コード例で述べたように)。

于 2011-05-26T10:50:20.427 に答える