2011-06-14 24 views
0

我很清楚我的xml按鈕的id如何轉換爲Button並最終轉換爲sayIt然而...瞭解setOnClickListener,View.OnClickListener(),onClick(View v),因爲它與模型 - 視圖 - 控制器概念有關

Button sayIt = (Button) findViewById(R.id.sayit); 

...它是setOnClickListener,「註冊」與控制器,以單擊按鈕時通知?如果是這樣,那麼View.OnClickListener()和它的onClick(View v)方法在哪裏Controller首先告訴我的代碼,嘿,我已經被點擊了,這是什麼被踢了食物鏈?

sayIt.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) { 

    // Does something cool 

} 
}); 

回答

2

對於大多數使用情況,是的,View.OnClickListener#onClick()是成語標準的「當點擊這個東西做什麼」。我說的最多的是,因爲實際的底層實現比這更多地涉及,觸摸事件在視圖層次結構中傳播的方式有所不同,然後才被檢測爲「單擊」事件,並沿層次向下傳播點擊事件 - 但除非您正在實施自定義視圖,並且需要執行基於自定義觸摸的跟蹤,否則您通常不需要擔心這些事件。例如,如果在視圖上設置View.OnTouchListener,則會獲得每個觸摸事件(向下移動,向上移動,在支持的設備上,甚至是多個指針)。在onTouchEvent()處理程序中,如果您使用return true,它會告訴「我對這個動作事件感興趣,並且已經消費了該事件;因此假裝事件從未發生並停止傳播/處理它」 - 通過這樣做,您實際上會干擾標準的OnClickListener點擊事件檢測。

但是在大多數情況下,如果因爲點擊按鈕而想要發生某些事情(驚喜,驚喜:),則可以使用View.OnClickListenerView#setOnClickListener()