FALSCHER WEG IM HÖRER, VARIABLE STATT PARAMETER ZU VERWENDEN !!!
btnSend.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
btnSend.setClickable(false);
}
});
RICHTIGER WEG:
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: Als Antwort auf @ jeroen-bollen
View.OnClickListener
ist die Schnittstellendefinition für einen Rückruf, der aufgerufen wird, wenn auf eine Ansicht geklickt wird.
mit Methodendefinition
void onClick(View v);
Wenn auf die Ansicht geklickt wird, ruft das View-Klassenobjekt die Methode onClick () zurück, die als Parameter selbst gesendet wird. Daher sollte kein Nullansichtsparameter auftreten, wenn es sich um einen Assertionsfehler handelt kann beispielsweise der Fall sein, wenn die View-Objektklasse in der Zwischenzeit zerstört wurde (z Beispiel durch GC gesammelt) oder Methode wurde aufgrund von Hack manipuliert
wenig über Instanz von & null
JLS / 15.20.2. Typvergleich Operator-Instanz von
Zur Laufzeit ist das Ergebnis des Operators instanceof true, wenn der Wert von RelationalExpression nicht null ist und die Referenz in den ReferenceType umgewandelt werden kann, ohne eine ClassCastException auszulösen.
Andernfalls ist das Ergebnis falsch .
drei Wörter vom Autor
WENN SIE FRAGEN, WARUM?
Meistens, um NullPointerException zu vermeiden
Etwas mehr Code spart Zeit bei der späteren Fehlerverfolgung in Ihrem Code und reduziert das Auftreten von Anomalien.
Betrachten Sie folgendes Beispiel:
View.OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
btnSend.setClickable(false);
}
});
btnSend.setOnClickListener(listener)
btnCancel.setOnClickListener(listener)