2011-09-17 120 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通常用于碎片。 所以保持编码。