2017-08-14 81 views
-1

,同時瞭解事件在android系統處理我碰到下面的代碼來爲什麼要將接口作爲參數傳遞給android中的函數?

這裏是我有

1)這是爲什麼實施 View.OnClickListener匿名類的一個實例()接口幾個問題作爲參數傳遞給 setOnClickListener()?

2)將此實例作爲參數傳遞的好處是什麼?

Button button = (Button) findViewById(R.id.button_send); 
button.setOnClickListener(new View.OnClickListener() // explain this { 
public void onClick(View v) { 
    // Do something in response to button click 
}}); 
+0

我想這幾乎是https://stackoverflow.com/q/11815101/1531971的副本。 – jdv

+3

[View.OnClickListener()函數或接口]的可能重複](https://stackoverflow.com/questions/11815101/view-onclicklistener-a-function-or-interface) – tima

+0

@tima在這裏有回聲嗎? – jdv

回答

1

目標:當用戶點擊按鈕時,您想要做些什麼。

你需要什麼:你需要知道用戶何時點擊按鈕。

你如何知道:使用這個View.OnClickListener接口。

這是View.OnClickListener的源代碼:

/** 
    * Interface definition for a callback to be invoked when a view is clicked. 
    */ 
    public interface OnClickListener { 
     /** 
     * Called when a view has been clicked. 
     * 
     * @param v The view that was clicked. 
     */ 
     void onClick(View v); 
    } 

這有點像傳遞的方法的另一種方法B和方法B中調用當某些事件發生的方法的。

在此View.OnClickListener的情況下,您傳遞的方法在用戶單擊按鈕時調用。

從技術上講,您實現了View.OnClickListener並立即創建它的實例並將其傳遞給方法setOnClickListener()。當用戶點擊按鈕時,onClick(View v)方法將被調用。因此,只要用戶點擊按鈕,onClick(View v)方法中的代碼就會執行。

0

您還沒有傳遞接口(View.OnClickListener),而是接口的實施實例

該實例通常是匿名的,因爲創建它的命名(可能是最終)實例基本上是無用的;唯一可能被使用的地方是作爲單個制定者的參數。並且爲了創建命名實例而創建的接口的任何實現都可能封裝特定於組件的行爲,這些行爲沒有多大意義公開爲命名類。

這在this SO answer中有很好的解釋。

相關問題