2013-10-13 54 views
1

在下面的代碼中,類「Test」擴展了Acitivity並實現了OnClickListener。Test擴展Activity實現onClickListener,何時/何處創建類「Test」的實例?

但是,「this」指的是類「Test」的實例。沒有「新」來創建 類「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中聲明您的活動即可。

那麼,何時/何時創建了Test類的實例?

該實例是「內部」創建的,位於openIntentonCreate方法之間。

+0

沒有書或論壇討論上述情況。因此,很多Android初學者混淆了「這是指當前對象的類」! – user1232250

+0

是的,最後一句實際上是真的,這並不意味着必須有一個新的視角:) – ssantos

1

那麼,何時/何時創建了Test類的實例?

在調用public void onCreate(Bundle savedInstanceState)方法(在你的情況下),因爲它的主要活動

爲了使它更清楚,讓我們改一下你的代碼:

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); 
} 

我們註冊我們的活動通過監聽器通過實例來收聽事件。但我們不希望setOnClickListener將看到我們所有的方法,因此他們要求我們僅提供接口(OnClickListener)。

+0

實際上,'setOnClickListener'將不會看到'Test'方法,因爲它的param被聲明爲'View .OnClickListener'。 – ssantos

+0

當然,因爲我們只通過接口 –

+0

Mmh仍然沒有在'OnClickListener clickListener = this;'中看到點,afaik只是將'this'傳遞給'setOnClickListener'會產生同樣的效果。 – ssantos

相關問題