настройка прослушивателей onClick для нескольких элементов в массиве - PullRequest
0 голосов
/ 15 августа 2011

Я пытаюсь реализовать список выбора. Каждый элемент является изображением.
Когда пользователь щелкает представление, открывается настраиваемое диалоговое окно, отображающее 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 Ответ

0 голосов
/ 16 августа 2011

Для начала я бы поставил цикл for( ... ) перед вызовом dialog.show ().

Чтобы ответить на более общий вопрос, посмотрите метод ListView.setOnItemClickListener () http://developer.android.com/reference/android/widget/AdapterView.html#setOnItemClickListener(android.widget.AdapterView.OnItemClickListener).

Вам нужно будет зарегистрировать только одного слушателя в вашем ListView.Если щелкнуть элемент в вашем ListView, вы окажетесь в коде под void onItemClick(AdapterView<?> parent, View view, int position, long id).Позиция будет индексом строки, по которой щелкнули (соответствует i в вашем цикле).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...