CÁCH SAU TRONG DANH SÁCH SỬ DỤNG LẮP ĐẶT LỚP CỦA PARAMETER !!!
btnSend.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
btnSend.setClickable(false);
}
});
ĐÚNG CÁCH:
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: Trả lời @ jeroen-bollen
View.OnClickListener
là định nghĩa Giao diện cho một cuộc gọi lại được gọi khi một chế độ xem được nhấp.
với định nghĩa phương thức
void onClick(View v);
khi chế độ xem được nhấp, đối tượng lớp View sẽ gọi lại phương thức onClick () gửi dưới dạng tham số, do đó, tham số null sẽ không xảy ra nếu đó là Lỗi xác nhận , ví dụ như khi lớp đối tượng View bị hủy ví dụ được thu thập bởi GC) hoặc phương thức đã bị can thiệp do hack
một chút về thể hiện & null
JLS / 15.20.2. Kiểu toán tử so sánh
Trong thời gian chạy, kết quả của toán tử instanceof là đúng nếu giá trị của RelationalExpression không phải là null và tham chiếu có thể được truyền tới ReferenceType mà không cần nâng ClassCastException.
Nếu không thì kết quả là sai .
ba từ của tác giả
NẾU U HỎI TẠI SAO?
NHẤT để TRÁNH NullPulumException
Ít mã hơn sẽ tiết kiệm thời gian của bạn cho việc theo dõi lỗi sau này trong mã của bạn và giảm sự xuất hiện của các từ ngữ.
xem xét ví dụ sau:
View.OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
btnSend.setClickable(false);
}
});
btnSend.setOnClickListener(listener)
btnCancel.setOnClickListener(listener)