Я делаю приложение, которое для экономии времени сохраняет кнопки в массиве, но не может добавить 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.
Почему бы вам не использовать recyclerView, если у вас есть массив кнопок. Вы создаете так много просмотров без какой-либо причины и приведете к резкому повышению производительности. Лучше использовать представление переработчика, так как это наиболее эффективный способ обработки массива одинаковых представлений.
'кнопки = новая кнопка [91]; for (int i = 3; i < 94; i++) { String str = "button" + i; кнопка = findViewById(getResources().getIdentifier(str, "id", getPackageName())); кнопки [i - 3] = кнопка; кнопки [i-3].setOnClickListener(это); }' теперь это работает. что такое recyclerView?




Перед настройкой прослушивателей убедитесь, что каждая кнопка, которую вы используете, правильно создана, вы можете настроить точку останова или ведение журнала, чтобы проверить, все ли создано правильно.
как бы я это сделал?
Просто проверьте и посмотрите, если button[x] == null, таким образом вы узнаете, не работает ли одна из ваших кнопок.
Возможный дубликат Что такое исключение NullPointerException и как его исправить?