질문 : 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
'프로그래밍 언어 > Android' 카테고리의 다른 글
Android 레이아웃 폴더에 하위 폴더를 포함하는 방법 (0) | 2021.09.29 |
---|---|
Android에서 화면 너비 및 높이 가져 오기 (0) | 2021.09.27 |
Android에서 URL로 ImageView를 로드하는 방법 (0) | 2021.09.17 |
Android Studio 오류 : /dev/kvm device permission denied (0) | 2021.09.16 |
[오류] All com.android.support libraries must use the exact same version specification (0) | 2021.09.15 |