2013-10-13 1 views
1

다음 코드에서 "Test"클래스는 확장 된 Acitivity이며 OnClickListener를 구현합니다.Test extends activities는 onClickListener를 구현합니다. "where"는 "Test"클래스의 인스턴스를 만들 때 사용합니까?

"this"는 "Test"클래스의 인스턴스를 나타냅니다. "테스트"클래스에 새 객체 을 만드는 "새로 만들기"가 없습니다. 그래서, 어디서/언제 Test 클래스의 인스턴스가 생성 되었습니까?

public class Test extends Activity implements OnClickListener { 

Button playButton; 

@Override 

public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    setContentView(R.layout.main); 

    playButton = (Button) this.findViewById(R.id.Button01); 

    playButton.setOnClickListener(this); 
} 

도움 주셔서 감사합니다.

답변

2

Android 프레임 워크는 새로운 의도를 열 때 자신의 활동을 구체화합니다. 따라서 new ActivityClass을 할 필요가 없습니다. AndroidManifest에 내 활동을 선언하면됩니다.

그래서,/때 테스트 클래스의 인스턴스가 생성 되었습니까?

인스턴스는 openIntentonCreate 메쏘드 사이의 '내부적으로'생성됩니다.

+0

아무 책이나 포럼은 위의 경우를 논의하지 않습니다. 따라서 많은 Android 초보자가 "클래스의 현재 객체를 참조합니다"라는 사실을 혼동합니다! – user1232250

+0

그래, 마지막 문장은 실제로 사실이다. 단지'new'가 있어야한다는 의미는 아니다 :) – ssantos

1

그래서,/언제 테스트 클래스의 인스턴스가 생성 되었습니까?

public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    setContentView(R.layout.main); 

    playButton = (Button) this.findViewById(R.id.Button01); 

     OnClickListener clickListener = this; // take current instance 

    playButton.setOnClickListener(clickListener); 
} 

우리가 청취자에게 우리의 활동을 등록 :

이 좀 더 명확하게하기 위해 주요 활동 때문에 (귀하의 경우) public void onCreate(Bundle savedInstanceState) 메소드를 호출에

은 조금 당신의 코드를 변경할 수 있습니다 인스턴스를 전달하여 이벤트를 수신합니다. 그러나 우리는 그들이 우리에게 Interface only (OnClickListener)를 제공하라고 요청하기 위해 우리의 모든 방법을 보길 원하지 않습니다. setOnClickListener.

+0

실제로'setOnClickListener'는'Test' 메쏘드를 보지 않을 것입니다. 그것의 param은'View .OnClickListener'. – ssantos

+0

물론, 우리는 인터페이스 만 전달하기 때문에 –

+0

여전히 'OnClickListener clickListener = this;'에서 포인트를 보지 못하고 afaik는'setOnClickListener'에'this'를 전달하면 같은 효과를 갖습니다. – ssantos

관련 문제