programing

XML과 Java 코드를 통해 OnClickListener 인터페이스를 사용하는 것은 어떻게 다릅니까?

sourcejob 2023. 9. 26. 22:20
반응형

XML과 Java 코드를 통해 OnClickListener 인터페이스를 사용하는 것은 어떻게 다릅니까?

중복 가능:
OnClick() 이벤트와 OnClickListener의 차이점은 무엇입니까?

저는 안드로이드 개발이 처음이고 처음 시작했을 때 xml 레이아웃을 사용하는 것을 피하려고 했습니다. 그래서 초기 프로젝트 중 일부에는 OnClickListener를 명시적으로 만들어 익명의 내부 클래스로 구현하는 버튼이 포함되어 있습니다.예를 들어 -

final Button button = new Button(this);
button.setText("Click to change second line of text");

OnClickListener buttonListener = new View.OnClickListener() {
    boolean clicked = false;
    int numClicks = 0;

    @Override
    public void onClick(View v) {
        if(numClicks > 5) {
            button.setText("STOP IT");
        }
        numClicks++;
        if(clicked == false){
            clicked = true;
            tv2.setText("Text Changed on Button Click");    
        }
        else
        {
            clicked = false;
            tv2.setText("Click again");
        }       
    }
};
button.setOnClickListener(buttonListener);

하지만 안드로이드에 익숙해지면서 xml 레이아웃의 가치를 이해하기 시작했고 이렇게 버튼을 구현했습니다.

    <Button
    android:id="@+id/button1"
    android:layout_height = "wrap_content"
    android:layout_width ="wrap_content"
    android:text = "lets do this"
    android:onClick = "DoIt"
    />

레이아웃 xml에서 DoIt가 자바에서 정의되었습니다.

제 질문은 이 두 가지 방법이 기능적으로 동일한가 하는 것입니다.배후에 컴파일러가 정의하는 OnClickListener가 있습니까?이런저런 방법으로 거래하는 기능이 있습니까?

이것들은 완전히 똑같습니다.android:onClickAPI 레벨 4에 더 쉽게, 더 자바스크립트 같은 웹과 비슷하게, XML로부터 모든 것을 구동할 수 있도록 추가되었습니다. 내부적으로 하는 일은 추가하는 것입니다.OnClickListener당신을 부르는 버튼에DoIt방법.

여기 A를 사용하는 것이 있습니다.android:onClick="DoIt"내부적으로 다음 작업을 수행합니다.

Button button= (Button) findViewById(R.id.buttonId);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        DoIt(v);
    }
});

당신이 거래할 수 있는 유일한 것은android:onClick, XML 구성의 일반적인 경우와 마찬가지로 동적 컨텐츠를 추가하는 것이 조금 더 어려워집니다(프로그램적으로 변수에 따라 리스너를 추가하거나 다른 리스너를 추가할 수 있음).하지만 이것은 당신의 테스트를 그 안에 추가함으로써 쉽게 패배할 수 있습니다.DoIt방법.

XML을 사용하면 클릭 수신기를 직접 설정해야 합니다.먼저 수업을 듣습니다.implements OnClickListener그런 다음 변수를 추가합니다.Button button1;그러면 이것을 당신의 것에 추가합니다.onCreate()

button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(this);

OnClickListener를 구현할 때 상속된 메서드를 추가해야 합니다.onClick()당신의 클릭을 처리할 수 있는 곳.

XML에서 Android:onClick = "DoIt"를 정의하더라도, 활동(또는 보기 컨텍스트)에 매개변수와 동일한 이름과 보기로 정의된 공개 방법이 있는지 확인해야 합니다.Android는 사용자의 정의를 이 작업에 구현하여 전달합니다.마지막에는 익명의 내부 클래스에서 작성한 코드와 동일한 코드가 구현됩니다.따라서 활동에서 내적 계층과 청자 애착을 갖는 대신 단순한 말로 실행 코드를 가진 공개적인 방법을 갖게 될 것입니다.

언급URL : https://stackoverflow.com/questions/8977212/how-is-using-onclicklistener-interface-different-via-xml-and-java-code

반응형