차이 :
- OnClickListener를 당신이 구현해야하고 자바 코드에서보기로 를 설정할 수있는 인터페이스입니다.
- OnClickListener는 누군가 을 실제로 클릭하기를 기다리는 것이며 onclick은 누군가 이 클릭 할 때 어떤 일이 발생하는지 결정합니다.
- 최근에 안드로이드는 android : onclick이라는이라는 뷰에 xml 속성을 추가하여 어떤 인터페이스도 구현할 필요없이보기의 작업 에서 직접 클릭을 처리하는 데 사용할 수 있습니다.
- 필요한 경우 하나의 수신기 구현을 다른 수신기와 쉽게 바꿀 수 있습니다.
- OnClickListener를 사용하면 click 이벤트의 동작/동작을 이벤트를 트리거하는 뷰와 구분할 수 있습니다. 간단한 이벤트의 경우 복잡한 이벤트 처리를 위해 큰 문제는 아니지만 코드의 가독성과 유지 보수성이 향상 될 수 있습니다.
- OnClickListener는 인터페이스이므로 구현하는 클래스는 인스턴스 변수 및 메서드를 결정할 때 유연성이 있습니다. 이벤트를 처리하기 위해 필요한 것입니다. 다시 말하지만 단순한 경우 큰 문제는 아니지만 복잡한 경우에는 이벤트 처리와 관련된 변수/메서드를 이벤트를 트리거하는보기의 코드와 혼합하지 않아도됩니다.
- XML 레이아웃에서 onClick with function 바인딩은 onClick과 호출 할 함수 사이의 바인딩입니다. 이 함수는 onClick이 작동하기 위해서는 하나의 인수 (View)가 있어야합니다.
두 가지 모두 같은 방식으로 작동하며, 자바 코드와 xml 코드를 통해 설정됩니다.
setOnClickListener 코드 구현 :
Button btn = (Button) findViewById(R.id.mybutton);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myFancyMethod(v);
}
});
// some more code
public void myFancyMethod(View v) {
// does something very interesting
}
XML 구현 :
<?xml version="1.0" encoding="utf-8"?>
<!-- layout elements -->
<Button android:id="@+id/mybutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click me!"
android:onClick="myFancyMethod" />
<!-- even more layout elements -->
성능 :
모두 성능이 동일합니다. Xml은 컴파일하는 동안 이진 코드로 미리 파싱됩니다. 따라서 XML에는 오버 헤드가 없습니다.
제한 :
안드로이드 : 온 클릭은 이후 API 레벨 4, 그래서 당신이 < 1.6을 대상으로하는 경우, 당신은 사용할 수 없습니다.
와 ButterKnife처럼
setOnClickListener
또는 라이브러리를 사용하는 것이 좋습니다 : 당신은 조심해야 당신으로 onclick' XML을'사용하는 경우 모든 클래스가 해당 메소드를 구현하는지 확인해야합니다. 이것은 레이아웃을 두 번 이상 사용한다고 가정합니다. 그러나 메소드를 구현 한 모든 클래스에 메소드가 있는지 확인하기 위해 Java 인터페이스가 있다면 걱정할 필요가 없습니다. – Uxonith자바 인터페이스가 없으므로 OnClickListener를 확장하거나 구현하는 것과 거의 같습니다. – KG6ZVP
나는 이것으로 이전을 검토 한 결과 내가 선호 그것보다 조금 더 있다고 생각하지만, 나는 동안이었다 나는 훨씬 더 말할 수 없습니다 죄송합니다. 나는 편리 할 때'android : onclick'을 좋아하지만 때로는 문제를 일으키고 그 중 하나를 기억할 수 없다는 것을 안다. :) – Uxonith