2013-09-27 3 views
0

인터페이스 이름이 "()"로 끝나지 않습니다.View.OnClickListener 안드로이드에서 매개 변수로 사용

Android 설명서에서 View.OnClickListener가 인터페이스로 정의되었습니다.

http://developer.android.com/reference/android/view/View.OnClickListener.html

은 다음과 같습니다 "()"우리가 우리가 그것을 종료해야 할 이유를 매개 변수로 청취자에게 "View.OnClickListener"를 통과 할 때, 그런 말로 미루어 보아.

.setOnClickListener(new View.OnClickListener() { 
+0

익명 내부 클래스. – Raghunandan

+0

그렇습니다.하지만 여전히()가 인터페이스에서 사용 된 이유를 이해할 수 없습니다. 어쨌든 tx – UnderDog

답변

4

선언과 동시에 클래스를 인스턴스화 할 수 있도록하는 Anonymous inner class의 구문입니다. setOnClickListenerOnClickListener 구현 유형의 오브젝트를 고려하는 대신에 직접이 방법을 구현하는 인터페이스 객체를 생성 그게

.setOnClickListener(new View.OnClickListener() { 

//all methods in the interface implemented here 

}); 

.

+0

메서드의 닫기 괄호와 세미콜론이 누락되었습니다. –

+0

@DanielLerps 고마워요. 나는 분명하지만. –

1

당신이

button.setOnClickListener(myclicklistener); 

    OnClickListener myclickListener = new OnClickListener() // now you know why you() 
    { 
     @Override 
     public void onClick(View v) 
     { 

    } 
    }; 

는 자바 문서에서 인용으로

button.setOnClickListener(new View.OnClickListener() { 
    @override 
    public void onClick(View v) 
    { 

    } 

}); 

http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html

당신도 할 수있는 버튼이 말하는 annonymous 내부 클래스

익명 클래스 표현은 다음과 같이 구성

  • 는 인터페이스의 이름을 구현하는 새로운 운영자 또는 클래스가 확장 할 수 있습니다.

  • 일반 클래스 인스턴스 작성 표현식 처럼 생성자에 대한 인수를 포함하는 괄호. 참고 :
    인터페이스를 구현할 때 생성자가 없으므로이 예제에서와 같이
    괄호의 빈 쌍을 사용합니다.

  • 본문은 클래스 선언 본문입니다. 보다 구체적으로, 본문의 에서는 메소드 선언이 허용되지만 명령문은 허용되지 않습니다.

1

클릭 리스너는 인터페이스입니다.

구문

variable.setOnClicklistener(new View.OnClickListener() 
{}) 

이것은 우리가 OnClickListener를 사용할 수있는 방법입니다.

1

여기에서는 익명의 수업을 시작 했으므로 따라서 인터페이스는 매개 변수로 전달되는 객체가됩니다.당신이 특정 인터페이스를 구현하는 객체를 생성하기 때문에

View.OnClickListener listener = new View.OnClickListener() { 

    @Override 
    public void onClick() { 
    } 
}; 
someView.setOnClickListener(listener); 
1

:

당신은이 방법을 coul. 다음에 나오는 블록의 메소드를 통해 정의한 익명 내부 클래스의 생성자 호출입니다.

something.setOnClickListener(new View.OnClickListener() 
{ 
    @Override 
    public void onClick(View invoker) 
    { 
     // this is a method specified by the interface. The new Object will have this method implementation 
    } 
}); 
+0

은'invoker'는'something'과 같습니다 (같은 참조이지만 상영 중입니까?)? –