프로그래밍 언어/Android

android:onClick XML 속성과 setOnClickListener의 차이점

Rateye 2021. 9. 27. 10:29
728x90
반응형
질문 : android : onClick XML 속성은 setOnClickListener와 정확히 어떻게 다릅니 까?

내가 읽은 것으로부터 두 가지 방법으로 버튼에 onClick

android:onClick void name(View v) 과 함께 공용 메서드의 이름을 OnClickListener 인터페이스를 구현하는 개체를 전달하는 setOnClickListener 메서드를 사용합니다. 후자는 종종 개인적으로 좋아하지 않는 (개인 취향) 익명 클래스가 필요하거나 OnClickListener 를 구현하는 내부 클래스를 정의해야합니다.

XML 속성을 사용하면 클래스 대신 메서드를 정의하기 만하면되므로 XML 레이아웃이 아닌 코드를 통해 동일한 작업을 수행 할 수 있는지 궁금합니다.

답변

아니요, 코드로는 불가능합니다. Android android:onClick="someMethod" 속성을 정의 할 때 OnClickListener 를 구현합니다.

이 두 코드 조각은 동일하며 두 가지 다른 방식으로 구현됩니다.

코드 구현

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
}

OnClickListener 의 코드 구현입니다. 그리고 이것이 XML 구현입니다.

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 -->

백그라운드에서 Android는 자바 코드 외에는 아무것도하지 않고 클릭 이벤트에서 메서드를 호출합니다.

위의 XML을 사용하면 Android는 현재 Activity에서만 onClick 메서드 myFancyMethod() 조각을 사용하여 위의 XML을 추가하더라도 Android는 .java onClick 메서드를 찾지 않기 때문에 조각을 사용하는 경우 기억해야합니다.

내가 알아 차린 또 다른 중요한 점. 익명 메서드를 선호하지 않는다고 언급했습니다. 당신은 익명의 수업 을 좋아하지 않는다고 말하려고했습니다.

출처 : https://stackoverflow.com/questions/4153517/how-exactly-does-the-androidonclick-xml-attribute-differ-from-setonclicklistene
728x90
반응형