MANEIRA ERRADA EM OUVIR USAR VARIÁVEIS EM VEZ DO PARÂMETRO !!!
btnSend.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
btnSend.setClickable(false);
}
});
MANEIRA CERTA:
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: Em resposta a @ jeroen-bollen
View.OnClickListener
é definição de interface para que um retorno de chamada seja chamado quando uma visualização é clicada.
com definição de método
void onClick(View v);
quando a visualização é clicada, o objeto da classe View retorna para o método onClick () enviando como o próprio parâmetro, portanto, o parâmetro nulo da visualização não deve ocorrer se ocorrer um erro de declaração . exemplo coletado pelo GC) ou método foi adulterado devido a invasão
pouco sobre instanceof & null
JLS / 15.20.2. Operador de comparação de tipo instanceof
No tempo de execução, o resultado do operador instanceof é verdadeiro se o valor da RelationalExpression não for nulo e a referência puder ser convertida no ReferenceType sem gerar uma ClassCastException.
Caso contrário, o resultado é falso .
três palavras do autor
SE VOCÊ PERGUNTAR POR QUE?
PARA EVITAR NullPointerException
Um pouco mais de código economizará seu tempo no rastreamento posterior de erros no seu código e reduzirá a ocorrência de anomalias.
considere o seguinte exemplo:
View.OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
btnSend.setClickable(false);
}
});
btnSend.setOnClickListener(listener)
btnCancel.setOnClickListener(listener)