Добавление onclicklistener в массив кнопок

Я делаю приложение, которое для экономии времени сохраняет кнопки в массиве, но не может добавить onClickListener к кнопкам в массиве.

когда я заменяю цикл, который добавляет onClickListener, на

buttons[0].setOnClickListener;
button[1].setOnClickListener;

код работает нормально, но когда я заменяю его этим циклом, показанным ниже

for (int i = 0; i < 91; i++) 
    buttons[i].setOnClickListener(this);

Я получаю эту ошибку «Попытка вызвать виртуальный метод« void android.widget.Button.setOnClickListener (android.view.View $ OnClickListener ) »для ссылки на нулевой объект» в строке внутри цикла for.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main_activity);
    board = (TableLayout) findViewById(R.id.tableLayout);
    bar = (TableLayout) findViewById(R.id.tableLayout2);
    buttons = new Button[91];
    for (int i = 2; i < 93; i++) {
        String str = "button" + i;
        if (i != 6) {
            button = findViewById(getResources().getIdentifier(str, "id", getPackageName()));
            buttons[i - 2] = button;
        }
    }
    text = findViewById(R.id.textView2);
    for (int i = 0; i < 91; i++) {
        buttons[i].setOnClickListener(this);
    }
}

Я ожидал, что цикл onClickListener будет работать, но всякий раз, когда я пытаюсь загрузить действие, которое эти кнопки помещают в мое приложение, происходит сбой.

ясно, что не каждый элемент вашего массива содержит экземпляр Button. Зои права: это действительно причудливый способ сказать, что у вас есть исключение NullPointerException.

Stultuske 02.04.2019 09:07

Почему бы вам не использовать recyclerView, если у вас есть массив кнопок. Вы создаете так много просмотров без какой-либо причины и приведете к резкому повышению производительности. Лучше использовать представление переработчика, так как это наиболее эффективный способ обработки массива одинаковых представлений.

Sarthak Gandhi 02.04.2019 09:12

'кнопки = новая кнопка [91]; for (int i = 3; i < 94; i++) { String str = "button" + i; кнопка = findViewById(getResources().getIdentifier(str, "id", getPackageName())); кнопки [i - 3] = кнопка; кнопки [i-3].setOnClickListener(это); }' теперь это работает. что такое recyclerView?

Eddie Cohen 03.04.2019 14:17
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
86
1

Ответы 1

Перед настройкой прослушивателей убедитесь, что каждая кнопка, которую вы используете, правильно создана, вы можете настроить точку останова или ведение журнала, чтобы проверить, все ли создано правильно.

как бы я это сделал?

Eddie Cohen 03.04.2019 10:54

Просто проверьте и посмотрите, если button[x] == null, таким образом вы узнаете, не работает ли одна из ваших кнопок.

Jack 03.04.2019 19:41

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