Android: слушатель на элементах массива

1

Я создал For Loop, который устанавливает каждый ImageView ID и ClickListener. Когда щелчок нажат, OnClickListner либо не может найти идентификатор, либо вообще не вызывается.

    public int[] myResources = {R.id.bblock1, R.id.bblock2, R.id.bblock3, R.id.bblock4, R.id.bblock5, R.id.bblock6, R.id.bblock7, R.id.bblock8};
    ImageView[] bblock = new ImageView[7];

for(int i = 0; i==myResources.length; i++) {
                             bblock[i]=(ImageView)layout.findViewById(myResources[i]);
                             bblock[i].setOnClickListener(ActivityCheck);

                      } 



View.OnClickListener ActivityCheck = new View.OnClickListener(){
            public void  onClick  (View  v){
                if( v.getId() == (R.id.bblock1)){
                    Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://twitter.com/#!/itz_jonno"));
                    startActivity(browserIntent);                   
                }

^^ OnClickListener не может найти представление. Хотя, БЕЗ использования массива и цикла кода ниже работает:

ImageView bblock1=(ImageView)layout.findViewById(R.id.bblock1);
bbblock1.setOnClickListener(ActivityCheck);

Любые идеи, почему массив не работает, но стандартный код будет?

  • 0
    используйте условие для этого, если ..switch ..
Теги:
scope
arrays
loops
listener

3 ответа

3
Лучший ответ

Измените i==myResources.length на i < myResources.length.

Текущий цикл немедленно выйдет, если 0 == myResources.length.

(Все прослушиватели событий были приятным приманкой, хотя.)

  • 0
    Не совсем - i <= ... вызовет исключение вне границ, когда i == myResources.length. Попробуйте я <myResources.length.
  • 0
    @ Барри спасибо, исправлено: D, я не должен делать эти вещи рано утром (но, по крайней мере, ошибка будет ясна).
Показать ещё 4 комментария
2

Помимо проблемы с циклом, ваш Listener будет работать только для R.id.block1, он будет egnore событий для всех других видов. Что именно вы пытаетесь достичь?

  • 0
    Я надеялся, что массив myResources решит эту проблему, добавив каждый ImageView с правильным макетом
  • 0
    У меня есть 8 ImageViews, которые будут активными, поэтому вместо того, чтобы записывать каждый из них по отдельности, я пытался создать хороший цикл, чтобы убирать много кода
Показать ещё 2 комментария
0
for(int i = 0; i==myResources.length; i++) {
                             bblock[i]=(ImageView)layout.findViewById(myResources[i]);
                             bblock[i].setOnClickListener(
                                new View.OnClickListener(){
            public void  onClick  (View  v){
                if( write u r checking condition here ){
                   start u r suitable activity here.                 
                }
                             );

                      } 
  • 0
    нет необходимости проверять состояние в слушателе, так как для каждого просмотра есть выделенный слушатель

Ещё вопросы

Сообщество Overcoder
Наверх
Меню