답변:
많은 것들과 마찬가지로 올바른 접근 방식은 특정 버튼에 대해 수행하려는 작업과 활동으로 수행하는 다른 작업에 따라 다릅니다.
활동 클래스는 인터페이스를 구현합니다 .
이것은 당신 만이 리스너가 호출 될 때 실행하는 작업의 한 유형이 좋은 옵션입니다. 이에 대한 예는 여러 필드와 저장 단추가있는 간단한 양식입니다. 실제로 수행해야 할 작업을 결정하기 위해 이벤트 리스너가 이벤트 소스를 확인하지 않도록하는 것이 좋습니다. 나는 이것이 스타일 일이라고 말할 수도 있지만, 청취자 가이 검사를 수행하도록 요구하지 않으면 각 이벤트에 대해 무엇이 호출되는지 정확하게 알 수 있으므로 코드를 더 쉽게 따라갈 수 있다고 생각합니다.
다른 클래스는 인터페이스를 구현합니다 .
위에서 말했듯이 동일한 이벤트를 발생시킬 수있는 여러 항목이있을 때이 옵션을 선호합니다. 위 예제를 확장하면 클릭 리스너가 필요한 지우기 버튼을 추가 할 수 있습니다. 저장 조치를 수행하는 리스너와 명확한 조치를 수행하는 리스너를 작성하십시오. 각 리스너는 해당 조치를 생성하는 컴포넌트에만 추가됩니다.
이 구현에는 관심이있는 경우 활용할 수있는 추가 이점이 있습니다. 다른 클래스가 액티비티 클래스 내부에서 이벤트를 트리거하지 못하게하는 이점이 있습니다. 인터페이스 메소드는 공용이어야하므로 클래스를 참조하는 사람은 누구나 이벤트를 실행할 수 있습니다. 응용 프로그램에서 누가 무엇을 할 수 있는지에 대해 세밀하게 제어하려면 별도의 클래스를 사용하여 활동을 참조하는 사람이 양식을 지우거나 저장하도록 트리거하거나 청취자가 소스를 사용하는 경우 코드를 손상시킬 수는 있지만 잘못된 입력을 처리하지 마십시오).
익명의 내부 클래스는 인터페이스를 구현합니다 .
이것은 실제로 다른 클래스를 구현으로 사용하는 두 번째 옵션을 구성하는 구체적인 방법입니다. 이 옵션은 다른 사람이 클래스의 인스턴스를 만들 수 없으므로 이벤트를 트리거 할 수있는 액세스 권한이있는 사용자를 추가로 제한 할 수 있습니다. 그러나 두 옵션 사이의 더 중요한 요소는 얼마나 많은 작업이 수행되고 있는지입니다. 몇 개의 텍스트 필드를 지우는 것은 간단하고 간단한 작업입니다. 그러나 for를 저장하는 프로세스에는 입력을 검증하고 (수행해야하는) 데이터베이스에 값을 저장하고 일부 저장 후 조치를 트리거하는 작업이 포함됩니다. 이 경우 자체 파일로 별도의 클래스를 작성하면 입력 양식과 데이터 처리가 더 명확하게 구분됩니다. 이것은 내부에 여러 내부 클래스가 중첩 된 더 큰 파일 대신 양식 코드를 유지합니다.
네 번째 방법은 레이아웃에서 onClick 속성을 설정하는 것입니다.
<Button android:onClick="clickHandlerForButtonX" />
액티비티에 해당하는 방법이 있습니다.
public void clickHandlerForButtonX(View v) {
//Handle Button X here
}