我正在使用带有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]);
但是,当我点击另一个图像时,另一个图像也显示为已选中,则会出现问题。正确的方法是将新图像显示为已选择,然后删除所选的旧图像。换句话说,较旧的图像应恢复为原始图像。
请帮我解决这个问题
谢谢,
的Pankaj
答案 0 :(得分:3)
您需要创建一个变量并保持单击图像的id。当用户单击其他图像时,首先根据变量中的id重置另一个图像,然后将变量值替换为当前单击图像的id。
答案 1 :(得分:1)
我假设您正在this tutorial中使用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);
感到有点困惑(正如我在代码示例中提到的那样)。