НЕБЕЗПЕЧНО ВІДПОВІДАЄТЬСЯ ВИКОРИСТОВУВАТИ РІЗНИЙ ВМЕСТО ПАРАМЕТРА !!!
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!");
}
}
}
});
EDIT: У відповідь на @ jeroen-bollen
View.OnClickListener
- це визначення інтерфейсу для зворотного виклику, який потрібно викликати при натисканні на представлення.
з визначенням методу
void onClick(View v);
при натисканні на представлення об'єкт класу View здійснює зворотний виклик методу onClick (), що надсилається як сам параметр, тому параметр null view не повинен виникати, якщо це робиться помилка твердження, це може статися, наприклад, коли тим часом клас об'єктів View був знищений (для Приклад, зібраний за допомогою GC) або метод був підроблений через злом
трохи про instanceof & null
JLS / 15.20.2. Типи Оператор порівняння типу
Під час виконання результат оператора instanceof є істинним, якщо значення RelationalExpression не є нульовим і посилання може бути передано на ReferenceType, не підвищуючи ClassCastException.
Інакше результат хибний .
три слова від автора
ЯКЩО ПИТАТИ ЧОМУ?
НАЙБІЛЬШЕ УНИМАТИ NullPointerException
Трохи більше коду заощадить ваш час на подальше відстеження помилок у вашому коді та зменшить кількість аномалій.
розглянемо наступний приклад:
View.OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
btnSend.setClickable(false);
}
});
btnSend.setOnClickListener(listener)
btnCancel.setOnClickListener(listener)