2017-07-24 397 views
-2

我想在我的Android應用程序中實現按鈕點擊處理。在Android Studio中的「View v」的含義

在包括我的按鈕的XML佈局文件,添加以下行到我Button XML元素:

android:onClick="handleClick" 

我還定義了一個方法,在所述Activity以下簽名使用此佈局:

public void handleClick() { /* ... */ } 

但是,當我用這段代碼運行我的應用程序時,它崩潰了。我可以通過更新我的方法簽名來解決此故障:

public void handleClick(View v) { /* ... */ } 

,但我不明白爲什麼我需要包括這種View參數?

回答

2

這是因爲您可能想要在您的XML中使用您的​​方法來處理2個或更多按鈕。

<Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:onClick="handleClick"/> 

<Button 
    android:id="@+id/button2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:onClick="handleClick"/> 

在這種情況下,可能不清楚哪個按鈕會觸發回調。 View v可幫助您識別例如

public void handleClick(View v) { 
    if (v.getId() == R.id.button1) { 

    } else if(v.getId() == R.id.button2) { 

    } 
} 
2

供給的View參數表示所接收的點擊事件的View。如果您重複使用​​方法多個View s(在這種情況下,您可以檢查傳遞給該方法以確定哪個View被點擊,如Enzokie's answer所示)的idid

定義方法時,您必須包含此參數View,即使您不在點擊邏輯中使用它。這是因爲reflection用於定位與您在XML中提供的名稱相對應的方法,並且方法名稱,參數計數和參數類型全部用於Java中的uniquely define a method。查看this section of the View source code以查看這種反射式查找的工作原理!

+0

謝謝!真棒回答。 –

+0

聖牛,這是「視圖」背後的源代碼?它超大。 –

+0

哈哈,是的,「視圖」類是一個巨獸! – stkent

1

視圖V是在您的的onCreate方法稱爲XML文件的對象。 要從xml引用任何組件,您必須使用v以獲取其組件的標識。

條件

你必須給ID以XML的組件,如果你想使用的onClick在類文件。

+0

謝謝!我明白。 –

相關問題