2013-05-26 129 views
1

如果我想單擊按鈕時發生某些事情,兩種方法的區別是什麼?第一個看起來簡單得多。Android事件處理方法

在佈局

<Button xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/button_send" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="@string/button_send" 
android:onClick="sendMessage" /> 

在活動

public void sendMessage(View v) { 
// do whatever 
} 

OR

private OnClickListener listener = new OnClickListener() { 
    public void onClick(View v) { 
    // do whatever 
    } 
}; 

protected void onCreate(Bundle savedValues) { 
    // Capture our button from layout 
    Button button = (Button)findViewById(R.id.mybutton); 
    // Register the onClick listener with the implementation above 
    button.setOnClickListener(listener); 
} 
+0

看看這個問題和答案:http://stackoverflow.com/questions/4153517/how-exactly-does-the-androidonclick-xml-attribute-differ-from-setonclicklistene – jenzz

回答

2

有幾個部分這樣的問題:性能,可維護性和個人喜好。

  1. 性能:由於框架必須使用反射來調用類的方法,所以使用xml方法會造成性能損失。薑餅和以上應該罰款(更好的JIT),但在此之前差異是顯而易見的。

  2. 我相信xml方法不易維護,因爲它在表示層中放置了「代碼事物」(方法名稱)。解開哪個處理程序需要勤奮的評論,哪些開發人員經常忘記添加。

  3. 與2相似,我相信這是更清晰的做字段分配(findViewById)和事件處理程序在同一個地方,然後我有一個「視圖初始化」區域。將它跨越檔案感覺就像對我施以酷刑。使用視圖/依賴注入甚至更好。

P.S.您不必將偵聽器分配給字段,使用匿名類可以更簡潔,然後調用您的活動/片段的單一方法。