НЕПРАВИЛЬНЫЙ ПУТЬ В СЛУЧАЕ ДЛЯ ИСПОЛЬЗОВАНИЯ ПЕРЕМЕННОГО ВМЕСТО ПАРАМЕТРА !!!
btnSend.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
btnSend.setClickable(false);
}
});
ПРАВИЛЬНЫЙ ПУТЬ:
btnSend.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
/** check given view by assertion or cast as u wish */
if(v instance of Button) {
/** cast */
Button button = (Button) v;
/** we can perform some check up */
if(button.getId() == EXPECTED_ID) {
/** disable view */
button.setEnabled(false)
button.setClickable(false);
}
} else {
/** you can for example find desired view by root view */
Button bt = (Button) v.getRootView().findViewById(R.id.btId);
/*check for button */
if(bt!=null) {
/** disable button view */
...
} else {
/** according to @jeroen-bollen remark
* we made assumption that we expected a view
* of type button here in other any case
*/
throw new IllegalArgumentException("Wrong argument: " +
"View passed to method is not a Button type!");
}
}
}
});
РЕДАКТИРОВАТЬ: В ответ на @ jeroen-bollen
View.OnClickListener
is Определение интерфейса для обратного вызова, вызываемого при нажатии на представление.
с определение метода
void onClick(View v);
при щелчке по представлению объект класса View выполняет обратный вызов метода onClick (), отправляя как сам параметр, поэтому нулевой параметр представления не должен появляться, если он это делает Ошибка подтверждения это может произойти, например, когда класс объекта View был уничтожен за это время (например, собран GC) или метод был подделан из-за взлома
немного о instanceof & null
JLS / 15.20.2.Оператор сравнения типов instanceof
Во время выполнения результат оператора instanceof равен true, если значение RelationalExpression не равно NULL и ссылка может быть приведена к ReferenceType без повышения ClassCastException.
В противном случае результат будет ложным .
три слова от автора
ЕСЛИ ВЫ спрашиваете, ПОЧЕМУ?
ТОЛЬКО ЧТОБЫ ИЗБЕЖАТЬ NullPointerException
Немного больше кода сэкономит ваше время на последующем отслеживании ошибок в вашем коде и уменьшит возникновение аномалий.
рассмотрим следующий пример:
View.OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
btnSend.setClickable(false);
}
});
btnSend.setOnClickListener(listener)
btnCancel.setOnClickListener(listener)