Я использую grid view с 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]);
Но проблема возникает, когда я нажимаю на другое изображение, другое изображение также отображается как выбрано. Правильный способ состоял бы в том, чтобы показать новое изображение как выбранное и удалить более старый, как выбранный. Иными словами, старший должен вернуться к исходному.
Пожалуйста, помогите мне в этом
Спасибо,
Панкай
Я предполагаю, что вы используете модифицированную копию класса 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);
, хотя (как я упоминал в своем примере кода).
Вам нужно создать переменную и сохранить в ней идентификатор клика. Когда пользователь нажимает другое изображение, сначала reset другое изображение в соответствии с идентификатором в переменной, а затем заменяет значение переменной идентификатором текущего щелкнутого изображения.
selectedView
был простоView
а неImageView
, я исправил это в коде (посмотрите мою историю редактирования, чтобы увидеть, что именно нужно изменить). Вторая ошибка не должна возникать, если вы точно скопировали этот код.view
- это параметр в методеonClick
.