Настройка прослушивателей 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 в вашем цикле).

Другие вопросы по тегам