Настройка прослушивателей onClick для нескольких элементов в массиве
Я пытаюсь реализовать список выбора. Каждый элемент является изображением.
Когда пользователь щелкает представление, открывается пользовательское диалоговое окно, отображающее 56 изображений в списке.
Пользователь может затем нажать на один, чтобы выбрать его.
Изображения имеют изображения с такими именами items_r1_c1 ... items_r56_c1.
Я должен реализовать onClickListeners для каждого из изображений.
Вместо этого я сделал это:
private int i; // This is int the outer class.
...
private ImageView [] spec = new ImageView[56];
myView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//set up dialog
try {
final Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.myCustomList);
dialog.setTitle("Select one of 56");
dialog.setCancelable(true);
dialog.show();
String s = null;
//This is where I automate the ImageView object creation
for (i=2; i<=56; i++) {
s = "items_r"+Integer.toString(i)+"_c1";
spec[i] = (ImageView) findViewById(getResources().getIdentifier(s,"drawable",getPackageName()));
spec[i].setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
myItem.setItem(Integer.toString(i));
if(i == 0) myItem.setItem("invalid");
Log.e(tag, myItem.getItem());
dialog.dismiss();
}
});
}
} catch (Exception e) {
Log.e(tag, e.toString());
}
}
Однако я не получаю поведение, которое я ожидал.
Что я делаю неправильно? Каков эффективный способ сделать это вместо того, чтобы писать 56 слушателей onClick.
Спасибо.
1 ответ
Для начала я бы поставил for( ... )
цикл перед вызовом dialog.show().
Чтобы ответить на более общий вопрос, посмотрите метод ListView.setOnItemClickListener () http://developer.android.com/reference/android/widget/AdapterView.html).
Вам нужно будет зарегистрировать только одного слушателя в вашем ListView. При нажатии на элемент в вашем ListView вы окажетесь в коде void onItemClick(AdapterView<?> parent, View view, int position, long id)
, Позиция будет индексом строки, по которой щелкнули (соответствует i в вашем цикле).