1

我正在使用带有 ImageAdapter 的网格视图来显示图像。我有两组图像,即包含原始图像的mThumbIds和包含所选图像的cThumbIds 。

现在,当我单击图像时,我会用所选图像更改普通图像。代码如下:

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 回答