OnClickListener와 OnClick의 차이점 :
- OnClickListener는 구현해야하는 인터페이스이며 Java 코드에서보기로 설정할 수 있습니다.
- OnClickListener는 누군가가 실제로 클릭하기를 기다리는 것이고, onclick은 누군가가 클릭 할 때 일어나는 일을 결정합니다.
- 최근에 android는 android : onclick이라는 뷰에 xml 속성을 추가했습니다. 이는 인터페이스를 구현할 필요없이 뷰의 활동에서 직접 클릭을 처리하는 데 사용할 수 있습니다.
- 필요한 경우 하나의 리스너 구현을 다른 구현으로 쉽게 바꿀 수 있습니다.
- OnClickListener를 사용하면 이벤트를 트리거하는보기에서 클릭 이벤트의 동작 / 동작을 분리 할 수 있습니다. 간단한 경우에는 그렇게 큰 문제가 아니지만 복잡한 이벤트 처리의 경우 코드의 가독성과 유지 관리 용이성을 의미 할 수 있습니다.
- OnClickListener는 인터페이스이기 때문에이를 구현하는 클래스는 이벤트를 처리하는 데 필요한 인스턴스 변수와 메서드를 결정하는 데 유연성이 있습니다. 다시 말하지만, 이것은 단순한 경우에는 큰 문제가 아니지만 복잡한 경우에는 이벤트 처리와 관련된 변수 / 메서드를 이벤트를 트리거하는 뷰의 코드와 혼합 할 필요가 없습니다.
- XML 레이아웃의 함수 바인딩이있는 onClick은 onClick과 호출 할 함수 간의 바인딩입니다. onClick이 작동하려면 함수에 하나의 인수 (View)가 있어야합니다.
둘 다 동일한 방식으로 작동합니다. 하나는 Java 코드를 통해 설정되고 다른 하나는 xml 코드를 통해 설정됩니다.
setOnClickListener 코드 구현 :
Button btn = (Button) findViewById(R.id.mybutton);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myFancyMethod(v);
}
});
public void myFancyMethod(View v) {
}
XML 구현 :
<?xml version="1.0" encoding="utf-8"?>
<Button android:id="@+id/mybutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click me!"
android:onClick="myFancyMethod" />
공연:
둘 다 성능면에서 동일합니다. 컴파일하는 동안 XML은 바이너리 코드로 미리 구문 분석됩니다. 그래서 Xml에는 오버 헤드가 없습니다.
한정:
android : onClick은 API 레벨 4 이상이므로 1.6 미만을 대상으로하는 경우 사용할 수 없습니다.
onclick모든 클래스가 해당 메서드를 구현하는지 확인해야 하므로 xml 을 사용할 때주의해야합니다 . 이것은 레이아웃을 두 번 이상 사용하고 있다고 가정합니다. 그러나 메소드가 구현 된 모든 클래스에 있는지 확인하기 위해 Java 인터페이스가 있다면 걱정할 필요가 없습니다.