2011-08-16 6 views
6

Android에는 버튼 클릭을 처리하는 일반적인 3 가지 방법이있을 것입니다. 메소드 간에는 얼마나 차이가 있습니까? 그리고 그들 중 어떤 사람들이 어떤면에서 더 나은가? 내가보고 계속Android에서 클릭되는 버튼을 처리하는 방법은 무엇입니까?

세 가지 방법은 다음과 같습니다

익명 클래스

이 ID의에 의해 버튼을 찾아, 새로운 익명 클래스, 예를 들어, setOnClickListener에 전달 onCreate

findViewById(R.id.myButton).setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     // .. Whatever 
    } 
}); 

가 OnClickListener를가

OnClickListener를 구현 setOnClickListenerthis 통과 구현하고, 버튼 ID, 예를 들어에 기초 switch 문을 사용 onCreate

findViewById(R.id.myButton).setOnClickListener(this); 

public void onClick(View v) { 
    switch(v.getId()) { 
     case R.id.myButton: 
      // ... whatever ... 
      break; 
    } 
} 

사용 onclick을 XML atribute 활동에 대한 XML 레이아웃에서

, 대신 버튼 ID를주는이 같은 onClick를 사용 onClick

처럼 구현 :

<Button 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:onClick="buttonClicked" 
    android:text="Button" /> 

는이처럼 Acitiviy에 buttonClicked 방법이 : 나는 XML 속성을 사용하는 경향이 순간

public void buttonClicked(View v) { 
    // ... whatever ... 
} 

을하지만 코드의 최소 금액을 포함하기 때문에 그것은 단지입니다. 다른 방법은 언제 사용해야합니까?

+0

+1 제 3의 방법을 설명하기 위해. 나는 안드로이드를 배우는 중이며'onClick' 속성을 알지 못했습니다. – Mike

답변

4

처음 두 가지는 고전적인 접근 방식입니다. Android 질문보다 일반적인 Java 질문이 더 선호됩니다. 세 번째 것은 더 쉽게하기 위해 나중에 추가되었습니다. 버튼에 클릭 리스너를 설정

매우 일반적인 일이지만, 은 상용구 코드의 꽤 필요합니다. 보일러 플레이트의 금액을 줄일 수있는 한 가지 방법은 여러 개의 버튼 사이에 단일 클릭 수신기를 공유하는 것입니다. 이 기술은 클래스 수를 줄이지 만 여전히 코드는 상당한 양의 코드가 필요하며 XML 레이아웃 파일에 각 버튼을 제공해야합니다. 안드로이드 1.6에서는, 이것들 중 어느 것도 필요하지 않다. . 당신이 클릭을 처리하기 활동에 공용 메서드를 선언하기 만하면됩니다 정말 항상 선호로 본 적이

Source

1

(방법은 하나 개의보기 인수가 있어야합니다). 마지막으로 두 가지 방법이 런타임에 개체를 만들지 않기 때문에 약간의 속도가 더 빨라질 수 있다는 점 이외에 성능 이점이 있는지 확실하지 않습니다.

첫 번째 옵션은 코드를 단일 버튼으로 분리하므로 버튼을 클릭 할 때 코드가 실행된다는 것을 알기 때문에 매우 쉽게 디버깅 할 수 있습니다. 그러나 많은 버튼으로 인해 초기화 메소드가 큰 크기로 확장 될 수 있습니다.

마지막 두 가지 방법은 모든 버튼 조작을 한 번에 편리하고 깨끗하게 할 수 있지만 많은 버튼을 사용하면 v.getId() 메소드를 통해 사용자가 어떤 버튼을 탭했는지 해독해야합니다.

마지막 옵션을 사용하면 특정 버튼에 대해 특정 방법을 쉽게 지정할 수 있으므로이를 분리 할 수 ​​있지만 여러 가지 방법으로 단일 용도로 사용할 수 있습니다.

나는 액티비티 나 클래스가 아닌 대화 상자에서 코드를 유지하기 때문에 단추가있는 사용자 지정 대화 상자 창에는 항상 인라인 메서드 (익명 클래스)를 사용했습니다. onCreateDialog을 덮어 쓸 때 사용자 정의 대화 상자의 버튼을 초기화합니다.

버튼이 기본 창에 있으면 Activity에 OnClickListener를 구현합니다.

관련 문제