CARA SALAH DALAM MENDENGARKAN GUNAKAN BUKAN PARAMETER BERBAGAI VARIABEL !!!
btnSend.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
btnSend.setClickable(false);
}
});
CARA YANG BENAR:
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: Sebagai balasan untuk @ jeroen-bollen
View.OnClickListener
adalah definisi Antarmuka untuk panggilan balik yang akan dipanggil ketika tampilan diklik.
dengan definisi metode
void onClick(View v);
ketika tampilan diklik objek Lihat kelas membuat panggilan balik ke metode onClick () mengirim sebagai parameter itu sendiri, jadi parameter tampilan nol tidak boleh terjadi jika itu merupakan Kesalahan Pernyataan itu bisa terjadi misalnya ketika kelas objek Lihat dihancurkan sementara (untuk contoh dikumpulkan oleh GC) atau metode dirusak karena peretasan
sedikit tentang instanceof & null
JLS / 15.20.2. Ketik Contoh Operator Perbandingan
Pada saat dijalankan, hasil dari instanceof bernilai benar jika nilai RelationalExpression tidak nol dan referensi dapat dilemparkan ke ReferenceType tanpa menaikkan ClassCastException.
Kalau tidak, hasilnya salah .
tiga kata dari Penulis
JIKA ANDA MEMINTA MENGAPA?
PALING UNTUK MENGHINDARI NullPointerException
Sedikit lebih banyak kode akan menghemat waktu Anda pada pelacakan bug selanjutnya dalam kode Anda & mengurangi terjadinya kelainan.
pertimbangkan contoh berikut:
View.OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
btnSend.setClickable(false);
}
});
btnSend.setOnClickListener(listener)
btnCancel.setOnClickListener(listener)