2011-09-17 117 views
20

我在大多數項目中總是使用onclick()事件。但是,我讀了OnClickListener()。誰能說出這兩者有什麼區別?哪一個最適合在Android應用程序中使用?OnClick()事件和OnClickListener之間的區別?

+3

您接受了錯誤的答案。肖恩歐文或userSeven7s是正確的。 – Reno

+0

[android:onClick XML屬性與setOnClickListener有什麼不同?](http://stackoverflow.com/questions/4153517/how-exactly-does-the-androidonclick-xml-attribute-differ-from- setonclicklistener) –

回答

27

我不確定問題是否清楚。 View.OnClickListener是一個接口,它定義了onClick(View)方法。如果你有一個想聽點擊的類,你應該實現接口(如果還沒有擴展一個類),並且實現這個方法。你必須同時使用;他們不是別的辦法。

+0

非常傷心的是,在android中有一個投票環可以正確回答:( – Reno

23

OnClickListener是需要實現,並且可以設定爲在Java代碼視圖的接口。

最近,android向視圖名爲android:onclick的視圖添加了一個xml屬性,它可以用來直接處理視圖活動中的點擊,而無需實現任何接口。

兩個功能是相同的,只是一個獲得通過java代碼集和其它通過XML的代碼。

11

OnClickListener就是等待有人來實際點擊,的onclick決定當有人點擊

監聽器是一個類,的onclick是一個方法會發生什麼,這種區別不是簡單的情況下非常有用,但如果你想更復雜變得更加必要

+1

+1對於簡短的描述.. –

0

我們使用

public void button_onClick_name(View v) 
{ 
------- 
} 

定義一個方法了之類的。 但是要定義一個組件單擊一個類中的事件,我們使用onclick監聽器。

20

我被你用onClick假設是,你在XML佈局定義的一個。這兩個替代方案的功能相同,但實現方式不同。

  1. onClick與功能佈局XML綁定的onClick,它會調用函數之間的綁定。該函數必須有一個參數(View)才能使onClick正常工作。

  2. OnClickListener是,任何類都可以實現一個接口。由於它是任何類可以實現的接口,因此它具有更多的靈活性和更復雜的形式。你可以有OnClickListener

    • 很少靈活性你可以很容易地換用另一個監聽器實現,如果你需要。
    • OnClickListener讓您的單擊事件的動作/行爲與觸發事件的View分開。雖然簡單的情況下,這不是什麼大不了的,複雜事件處理,這可能意味着該代碼
    • 由於OnClickListener是一個接口,實現它在確定的實例變量和方法的靈活性類的更好的可讀性和可維護性它需要處理事件。同樣,在簡單情況下這不是什麼大問題,但對於複雜情況,我們不希望將與事件處理相關的變量/方法與觸發事件的View代碼混淆在一起。
0

考慮「OnClickListener」因爲誰正在等待您的用戶點擊您的應用程序的按鈕,一個傢伙。 然後你的傢伙會執行你的方法的OnClick()

您必須在您的xml文件中爲您的按鈕添加一個id,然後在您的MainActivity.java文件中爲其指定一個名稱。然後設置一個點擊監聽器給你的傢伙。並添加您的onClick方法。 這就是爲什麼的onClick被綁定到該接口View.OnClickListener: https://developer.android.com/reference/android/view/View.OnClickListener.html

例子:

Button myButton = (Button)findViewById(R.id.myButton); 
myButton.setOnClickListener(new View.OnClickListener(){ 
    @override 
    public void onClick(View v) { 
     // your method... 
    } 
} 
0

有幾個原因,你可能想以編程方式設置的OnClickListener。首先,如果您想在應用程序運行時更改按鈕的行爲。您可以在另一種方法完全指向您的按鈕,或者只是通過設置OnClickListener不會做任何禁用按鈕。

當您使用onClick屬性定義偵聽器時,該視圖僅在其主機活動中查找具有該名稱的方法。編程設定的OnClickListener允許您控制從比它的主機活動之外的其他地方按鈕的行爲。這將變得非常相關Fragments,Fragments總是需要使用OnClickListeners來控制他們的按鈕,因爲他們不是活動,並且不會搜索在onClick中定義的聽衆。

5
Button button = (Button)findViewById(R.id.buttonId); 
button.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // Do stuff 
    } 
}); 

OnClickListener是一個接口和的onClickOnClickListener方法。

0

您可以在XML中添加android:onClick="your_method"屬性。

例子:

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Click" 
    android:onClick="your_method"/> 
0

我們java代碼使用XML OnClickOnClickListner。兩者都用於執行功能。

0

當我們想要在Java代碼中添加點擊監聽器到按鈕時,我們使用OnClickListener
當我們要點擊監聽器添加到按鈕佈局文件,我們使用android:onClick="your_method"
如果使用XML變種,你必須在你的應用類中實現your_method

0

有幾個原因可能會導致您想要以編程方式設置OnClickListener。首先,如果您想在應用程序運行時更改按鈕的行爲。你可以完全將你的按鈕指向另一個方法,或者通過設置一個沒有任何作用的OnClickListener來禁用按鈕。

當您使用onClick屬性定義偵聽器時,視圖僅在其主機活動中查找具有該名稱的方法。通過以編程方式設置OnClickListener,您可以從其主機活動以外的某個位置控制按鈕的行爲。當我們瞭解碎片時,這將變得非常相關,碎片基本上是迷你活動,允許您在自己的生命週期中構建可重用的視圖集合,然後將它們組合到活動中。片段始終需要使用OnClickListeners來控制它們的按鈕,因爲它們不是活動,並且不會搜索onClick中定義的監聽器。

0

大家都提到過關於OnClickListener listner哪一個總是用的。 我想添加一個點作爲方法作品,它不需要引用,所以當你需要添加按鈕後,你需要添加按鈕,所以你不能引用它爲OnClickListener

對於example當我們創建viewpager只佈局(無碎片),如果你在任何佈局把一個按鈕,它只有insialized佈局時可見的,所以你不能在becomed有用這種情況下使用方法findViewById的按鈕只是把該方法在活動中!

0

這裏是簡單的術語 如果你在家裏,你想給別人打電話..你可以直接打電話,他們可以聽你的。 (使用onclick)。但是,如果你在外面,你想在家裏打電話,你需要使用手機或互聯網(需要使用onclicklistener)。在Android中,一切都從家中開始,也就是說, main_activity 這是android減輕你工作的方式;當你有一個活動時,你不必附加一個監聽器,創建對象並定義它。只需使用onClick。 Onclicklistener通常用於碎片。 所以保持編碼。