PARAMETRENİN DEĞİŞKEN KURULUMUNU KULLANMAK İÇİN DİNLEYİCİ YANLIŞ !!!
btnSend.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
btnSend.setClickable(false);
}
});
DOĞRU YOL:
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 adlı kişiye yanıt olarak
View.OnClickListener
olduğu Arayüz tanımı bir görünüm tıklandığında bir geri arama çağrılacak için.
ile yöntem tanımı
void onClick(View v);
görünüm tıklandığında, View sınıfı nesnesi, parametrenin kendisi olarak gönderme yöntem onClick () yöntemine geri çağrı yapar, bu nedenle bir Onaylama Hatası ise null view parametresi oluşmamalıdır , örneğin View object sınıfının bu arada yok edilmesi durumunda ( GC tarafından toplanan örnek) veya yöntem hack nedeniyle kurcalanmıştır
instanceof & null hakkında biraz
JLS / 15.20.2. Tür Karşılaştırma Operatörü örneği
Çalışma zamanında, RelationalExpression değeri null değilse ve başvuru bir ClassCastException oluşturmadan ReferenceType'a dönüştürülebilirse instanceof operatörünün sonucu true olur.
Aksi takdirde sonuç yanlıştır .
Yazardan üç kelime
U NEDEN SORUNSA?
EN ÇOK KAPSAMAZ NullPointerException
Biraz daha fazla kod, kodunuzdaki daha sonraki hata takibine zaman kazandıracak ve anormallik oluşumunu azaltacaktır.
aşağıdaki örneği düşünün:
View.OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
btnSend.setClickable(false);
}
});
btnSend.setOnClickListener(listener)
btnCancel.setOnClickListener(listener)