OnClickListener là một interface và bằng cách sử dụng new OnClickListener()
như tham số cho btn1.setOnClickListener nó thực sự đang tạo ra một Anonymous Inner Class mà thực hiện OnClickListener . Và phương pháp onClick phải cần được khai báo vì nó là phương thức trừu tượng bên trong lớp giao diện đó. Bất kỳ mã nào bạn viết bên trong onClick sẽ được thực hiện khi nhấn nút.
Cập nhật
để làm điều đó bằng Anonymous lớp bên trong một đối tượng:
//declaring OnClickListener as an object
private OnClickListener btnClick = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
};
//passing listener object to button
btn1.setOnClickListener(btnClick);
để làm điều đó mà không sử dụng Anonymous lớp:
public class YourActivity extends Activity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
Button b = new Button(this);
//setting listener to button
b.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
}
Sự khác biệt duy giữa các phương pháp này là, nếu nút của bạn có chứa nhấp chuột mã sự kiện được cho là hợp lệ/có sẵn cho nút đó, sau đó bạn có thể sử dụng lớp bên trong như bạn đang làm trong mã của bạn (vì nó dễ làm ngay). Tuy nhiên nếu có nhiều nút yêu cầu cùng một mã được thực hiện trên sự kiện onClick thì bạn có thể định nghĩa người nghe làm đối tượng và chuyển nó cho họ.
Hi ODO chúng tôi đang đi qua một đối tượng như một argument.Basically chúng tôi đang tạo ra lớp bên trong mà ghi đè phương pháp onClick. –