Сначала , вы не правильно установили вид изображения с этим кодом.Это потому, что вы устанавливаете ImageView в массив дважды с другим ImageView (Пожалуйста, прочитайте комментарий в коде:
// You're creating a ImageView
ImageView myImage = new ImageView(this);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(32, 8, 32, 8);
myImage.setLayoutParams(lp);
myImage.setImageBitmap(bitmap1);
// You're setting a new ImageView to array
myImages[CityImageCount] = new ImageView(this);
// then you set the Id
myImages[CityImageCount].setId(CityImageCount);
// But then you discard it by setting the array item with myImage
// so you're discarding the id.
myImages[CityImageCount] = myImage;
Итак, вам нужно установить ImageView в массив следующим образом:
ImageView myImage = new ImageView(this);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(32, 8, 32, 8);
myImage.setLayoutParams(lp);
myImage.setImageBitmap(bitmap1);
myImages[CityImageCount] = myImage;
myImages[CityImageCount].setId(CityImageCount);
(Примечание: вместо массива вы можете использовать ArrayList)
Второй , вам нужно использовать generateViewId () или ViewCompat.generateViewId () при установке идентификатора вида. Вы не можете вручную задать идентификатор вида с помощью простого идентификатора счетчика цикла, например:
myImages[CityImageCount].setId(CityImageCount);
это должно быть примерно так:
// View.generateViewId() is only available from api 17
myImages[CityImageCount].setId(View.generateViewId());
// Use ViewCompat if you need to support API < 17
// myImages[CityImageCount].setId(ViewCompat.generateViewId());
Третий , вам нужно обработать щелчок изображения, проверив идентификатор:
myImages[CityImageCount].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
// Check the id
String id = v.getId();
...
}
Если вам нужен специальный ключ для изображения, вы можете использовать HashMap вместо Array, как это:
Map<String, ImageView> map = new HashMap<String, ImageView>();
...
ImageView myImage = new ImageView(this);
map.put("Id1",myImage);
Last , разделите вашу логику на что-то вроде этого:
private ImageView generateImageView() {
ImageView myImage = new ImageView(this);
// set the ImageView properties here.
...
return myImage;
}
private void addImageViewToList(ImageView imageView) {
// Add ImageView to the array
}
// hold previous click listener for ImageView.
private View.OnClickListener mImageViewClickListener;
// Get View.OnClickListener for ImageView, create it if not yet initialized.
private View.OnClickListener getImageViewClickListener() {
if(mImageViewClickListener == null) {
mImageViewClickListener = new View.OnClickListener() {
@Override
public void onClick(final View v) {
// handle the ImageView click here
...
}
}
return mImageViewClickListener;
}
, чтобы вы могли упорядочить свой код в нечто вродеэто:
ImageView imageView = generateImageView();
imageView.setOnClickListener(getImageViewClickListener());
addImageViewToList(imageView);