2011-08-16 20 views
6

在Android中,似乎有3種處理按鈕點擊的常見方法,這些方法之間有多大的差異?他們中的任何一個在某種程度上「更好」?如何處理在Android中點擊的按鈕?

這三種方法我一直看到的是:

匿名類

查找按鈕,通過它的ID,然後通過一個新的匿名類setOnClickListener,例如在onCreate

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

實現OnClickListener

實施OnClickListener並傳遞到thissetOnClickListener,然後使用基於按鈕的ID,例如一個switch敘述在onCreate

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

和實施onClick

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

使用的onClick XML屬性附加傷害

在爲您的活動的XML佈局,而不是給你的按鈕的ID,使用onClick這樣:

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

然後在你的Acitiviy一個buttonClicked方法是這樣的:

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

目前,我傾向於使用XML屬性,但是這只是因爲它涉及最少的代碼量。我應該何時使用其他方法?

+0

+1用於描述第三種方法。我只是學習Android,並沒有意識到'onClick'屬性。 – Mike

回答

4

前兩個是經典的方法。你更喜歡哪一個是一個普通的Java問題,而不是一個Android問題。 第三個稍後添加使事情變得更容易。

在按鈕上設置點擊監聽器是非常普遍的任務,但它 需要相當多的樣板代碼。減少樣板數量 的一種方法是在幾個 按鈕之間共享單擊聽衆。儘管這種技術減少了類的數量,但它仍然需要相當數量的代碼,並且仍需要在每個 按鈕的XML佈局文件中爲其指定一個ID。使用Android 1.6時,此 都不是必需的。所有你必須做你的 活動以處理click被聲明的公共方法(該方法必須有一個搜索參數)

Source

1

我真的總是看到它的偏好。我不確定除了最後兩種方法之外,還有其他方面的性能優勢可能稍微快一點,因爲它們不是在運行時創建對象。

第一個選項將代碼隔離到單個按鈕,所以它非常容易調試,因爲只知道單擊該按鈕時將執行的代碼。但是,許多按鈕可能會導致初始化方法擴展爲大尺寸。

最後兩種方法將所有的按鈕處理放在一個可以方便且更清潔的地方,但有很多按鈕需要解密用戶通過v.getId()方法輕敲了哪個按鈕。

最後一個選項允許您輕鬆地爲特定按鈕指定特定的方法,以便您可以將它們分離出來,但是您將有許多用於單一目的的方法。

我一直使用內聯方法(匿名類)來實現自定義對話框窗口的按鈕,因爲它將代碼保留在對話框的其餘部分而不是活動或類中。當我覆蓋onCreateDialog時,我只是初始化自定義對話框的按鈕。

如果按鈕位於主窗口上,我在Activity上實現了OnClickListener。