programing

Android on Click in XML vs.OnClickListener

newsource 2023. 10. 7. 11:00

Android on Click in XML vs.OnClickListener

저는 비슷한 단어의 질문이 이전에 있었다는 것을 깨달았지만, 이것은 다릅니다. 앱 다 세 android:onclick="" 및 dsetOnClickListener방법.

  1. 그 둘의 차이점은 무엇입니까?두 구현 간의 차이는 컴파일 타임에서 발견됩니까, 아니면 실행 타임에서 발견됩니까, 아니면 두 가지 모두입니까?

  2. 어떤 활용 사례가 어떤 구현에 유리합니까?

  3. 안드로이드에서 프래그먼트를 사용하면 구현 선택에 어떤 차이가 있습니까?

OnClickListener 대 OnClick의 차이점:

  • OnClickListener는 구현해야 하는 인터페이스로 자바 코드의 보기로 설정할 수 있습니다.
  • OnClickListener는 누군가가 실제로 클릭할 때까지 기다리는 기능으로, onclick은 누군가가 클릭할 때 발생하는 동작을 결정합니다.
  • 최근 안드로이드는 안드로이드:onclick이라고 불리는 뷰에 xml 속성을 추가했는데, 이는 인터페이스를 구현할 필요 없이 뷰의 활동에서 직접 클릭을 처리하는 데 사용할 수 있습니다.
  • 필요한 경우 한 청취자 구현을 다른 청취자 구현과 쉽게 바꿀 수 있습니다.
  • OnClickListener를 사용하면 이벤트를 트리거하는 보기에서 클릭 이벤트의 작업/동작을 분리할 수 있습니다.단순한 경우에는 큰 문제가 아니지만 복잡한 이벤트 처리의 경우에는 코드의 가독성과 유지보수성이 향상될 수 있습니다.
  • OnClickListener는 인터페이스이므로 이를 구현하는 클래스는 이벤트를 처리하는 데 필요한 인스턴스 변수와 메서드를 유연하게 결정할 수 있습니다.다시 말하지만, 이는 단순한 경우에는 큰 문제가 아니지만 복잡한 경우에는 이벤트 처리와 관련된 변수/메소드를 이벤트를 트리거하는 View의 코드와 혼동할 필요가 없습니다.
  • XML Layout의 onClick with function binding은 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에 오버헤드가 없습니다.

제한 사항:

안드로이드:onClick은 API 레벨 4 이상을 위한 것이므로 < 1.6을 목표로 한다면 사용할 수 없습니다.

하지 않았다는. 만, 하세요이지만 조심하세요. 하세요.android:onClick다를 인 것 .setOnClickListener하는 것 을 수행합니다.onClickListener에 넣었군요.clickable

대부분의 Android 구현에서는 문제가 되지 않을 수 있지만 전화 생성기에 따르면 버튼은 항상 클릭 가능 = true로 기본 설정되어 있지만 일부 전화 모델의 다른 생성기에서는 버튼이 아닌 보기에서 기본 클릭 가능 = false로 설정되어 있을 수 있습니다.

XML 를 . 추가하려면 항상 생각해야 합니다.android:clickable="true"기본값이 클릭 가능한 = true인 장치가 있고 이 XML 속성을 입력하는 것을 한 번이라도 잊어버린다면 실행 시에는 문제를 인식하지 못하겠지만 언제 고객의 손에 들어갈지 시장에서 피드백을 받을 것입니다!

또한 proguard가 XML 특성과 클래스 메서드를 어떻게 난독화하고 이름을 바꾸는지 확신할 수 없으므로 언젠가는 버그가 발생하지 않을 100% 안전하지 않습니다.

만약 문제를 겪고 않고 를 .setOnClickListener다인 .@OnClick(R.id.button)

간단히:

에.android:onClick = "someMethod" xml에서, 그것은.public void someMethod활동 시간에.OnClickListener활동에서 바로 호출되며 특정한 특정한 것과 연결됩니다.View를 들면.someButton.setOnClickListener그리고 다 할 있습니다.someButton눌려 있습니다.

도움이 되길 바랍니다 :)

앞에서 말했듯이, 둘 다 이벤트에 대한 응답으로 논리를 추가하는 방법입니다. 이 경우 '클릭' 이벤트가 발생합니다.

HTML/JavaScript 세계에서와 마찬가지로 논리와 프레젠테이션을 분리하고자 합니다. 프레젠테이션을 위해 XML을 남겨두고 코드를 사용하여 이벤트 청취자를 추가합니다.

방식으로 하려는 몇 .OnClickListener 첫 번째는 앱이 실행되는 동안 버튼의 동작을 변경하려는 경우입니다.도 있고,다를 도 있습니다.OnClickListener아무 소용이 없습니다

를 사용하여 리스너를 정의할 때onClickattribute, 보기는 호스트 활동에서만 해당 이름을 가진 메서드를 찾습니다.프로그래밍 방식으로 설정하기OnClickListener호스트 활동이 아닌 다른 곳에서 단추의 동작을 제어할 수 있습니다.이것은 우리가 사용할 때 매우 관련성이 있을 것입니다.Fragments, 이는 기본적으로 미니 활동이므로 고유한 라이프사이클을 통해 재사용 가능한 보기 모음을 구축할 수 있으며, 이를 통해 활동으로 조립할 수 있습니다.파편은 항상 사용해야 합니다.OnClickListeners버튼은 활동이 아니며 onClick에 정의된 청취자를 검색하지 않기 때문에 버튼을 제어합니다.

하나의 방법으로만 여러 개의 버튼이 있다면 자바로 하는 것을 추천합니다.그러나 특정 방법이 하나인 버튼이 있다면 XML에서 클릭을 하는 것이 더 나을 것입니다.

런타임에 버튼을 인스턴스화하거나 Fragment 하위 클래스에서 클릭 동작을 선언해야 하는 경우 등 그럴만한 이유가 없는 한 항상 Android:onClick 특성을 사용하는 것이 더 편리합니다.

그들 사이의 주요한 차이점은 다음과 같습니다.

클릭 시:손가락으로 버튼을 누르면.

OnClickListner:다양한 코드로 구현되는 더 넓은 선택일 수 있습니다.

예를 들어 url "ymail.com "을 입력하면 야후는 브라우저에서 사용자 이름과 비밀번호를 찾고 클릭 상태 버튼을 활성화하여 메일을 엽니다.이 작업은 ClickListener에서만 구현해야 합니다.

이건 내 생각입니다!

언급URL : https://stackoverflow.com/questions/21319996/android-onclick-in-xml-vs-onclicklistener