#android #hashmap #imageview #drawable #grid-layout
#Android #hashmap #просмотр изображений #возможность рисования #сетка-макет
Вопрос:
В моем приложении есть GridLayout и 60 просмотров изображений. Я хочу назначить возможность рисования для 25 ячеек макета сетки. для этой цели у меня есть массив с 25 случайными числами.
затем я определил хэш-карту, в которой каждый элемент является одним из представлений изображения:
private HashMap<Integer, Integer> imageViews = new HashMap<>();
imageViews.put(0, R.id.imageView1);
.
.
.
imageViews.put(59, R.id.imageView60);
и поместите 60 imgageviews в hashmap… 0 — идентификатор для первого просмотра изображений.
и установите drawable для ячеек с помощью этого метода:
private void setBombDrawable(){
HashMap<Integer, Integer> map = mImageViewsMap.getImageViews();
for (int tag : randomBombArray) {
int id = map.get(tag);
ImageView imageView = findViewById(id);
imageView.setImageResource(R.drawable.exploded);
}
}
код выполняется без проблем, но если есть какой-либо более простой способ получения идентификатора или тега imageviews из макета сетки вместо 60 строк кода?
Ответ №1:
Зачем просто id, когда вы можете получить ImageView непосредственно из GridLayout. GridLayout — это ViewGroup, поэтому вы можете перебирать все его дочерние представления.
private Map<Integer, ImageView> imageViews = new HashMap<>();
int childCount = gridLayout.getChildCount();
for (int i = 0; i < childCount; i ) {
View v = gridLayout.getChildAt(i);
if (v instanceof ImageView) {
map.put(i, (ImageView) v);
}
}