XML과 Java 코드를 통해 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
'programing' 카테고리의 다른 글
| 사용자가 마우스를 이동하지 않고 브라우저 커서를 "대기"에서 "자동"으로 이동 (0) | 2023.09.26 |
|---|---|
| ID 또는 이름이 앵커인 웹 페이지 위치에 대한 하이퍼링크 기능 (0) | 2023.09.26 |
| Angular2의 일부 div에서 모든 입력을 읽기만 하는 방법? (0) | 2023.09.26 |
| Git 상태 - 특정 디렉토리에서만 변경사항을 표시할 수 있는 방법이 있습니까? (0) | 2023.09.26 |
| 자바스크립트 교차 도메인 호출: HTTP에서 HTTPS로 호출 (0) | 2023.09.26 |