OnClick()事件和OnClickListener之间的区别?

时间:2011-09-17 07:44:51

标签: android onclick

我在大多数项目中总是使用onclick()事件。但是,我读到了OnClickListener()。谁能说出这两者之间有什么区别?哪一个最适合在Android应用程序中使用?

16 个答案:

答案 0 :(得分:27)

我不确定问题是否清楚。 View.OnClickListener是一个接口,用于定义onClick(View)方法。如果你有一个打算监听点击的类,你应该都实现接口(如果还没有扩展一个类),并实现这个方法。你必须同时使用两者;他们不是某种替代品。

答案 1 :(得分:23)

OnClickListener是您需要实现的接口,可以在java代码中设置为视图。

最近,android为名为android:onclick的视图添加了一个xml属性,可以直接在视图的活动中处理点击,而无需实现任何接口。

两者的功能相同,只需通过java代码设置,另一个通过xml代码设置。

答案 2 :(得分:21)

我假设onClick您使用的是您在XML Layout中定义的那个。这两个是替代的,可以起到相同的作用,但实现方式不同。

  1. XML Layout中带有函数绑定的onClick是onClick与它将调用的函数之间的绑定。该函数必须有一个参数(View)才能使onClick正常运行。

  2. OnClickListener是任何类都可以实现的接口。由于它是任何类都可以实现的接口,因此它具有更大的灵活性和更复杂的形式。使用OnClickListener

    时,您可以获得的灵活性很少
    • 如果需要,您可以轻松地将一个侦听器实现与另一个侦听器实现交换。
    • 使用OnClickListener可以将点击事件的动作/行为与触发事件的View分开。虽然对于简单的情况,这对于复杂的事件处理来说并不是一件大事,但这可能意味着更好的可读性和代码的可维护性
    • 由于OnClickListener是一个接口,实现它的类在确定处理事件所需的实例变量和方法时具有灵活性。同样,在简单的情况下,这不是什么大问题,但对于复杂的情况,我们不希望将与事件处理相关的变量/方法与触发事件的View代码混淆。

答案 3 :(得分:11)

OnClickListener是等待某人实际点击的内容,onclick确定当有人点击时会发生什么

监听器是一个类,onclick是一个方法,这个区别在简单的情况下不是很有用,但如果你想要更复杂,那就更加必要了

答案 4 :(得分:5)

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

OnClickListener 是一个界面, onClick OnClickListener 的方法。

答案 5 :(得分:0)

我们使用

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

定义一个类外的方法。 但是要在类中定义组件Click事件,我们使用onclick listener。

答案 6 :(得分: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...
    }
}

答案 7 :(得分:0)

您可能希望以编程方式设置OnClickListener,这有几个原因。首先,如果您想在应用程序运行时更改按钮的行为。您可以完全按照其他方法指向按钮,或者只需设置一个不执行任何操作的OnClickListener来禁用该按钮。

使用onClick属性定义侦听器时,视图仅在其主机活动中查找具有该名称的方法。以编程方式设置OnClickListener允许您从其主机活动以外的其他位置控制按钮的行为。这与Fragments非常相关,Fragments始终需要使用OnClickListeners来控制其按钮,因为它们不是活动,并且不会搜索{{}中定义的侦听器1}}。

答案 8 :(得分:0)

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

示例:

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

答案 9 :(得分:0)

我们在xml中使用OnClick,在OnClickListner代码中使用java。两者都用于执行功能。

答案 10 :(得分:0)

当我们想在Java代码中向按钮添加点击监听器时,我们使用OnClickListener 当我们想要在布局文件中向按钮添加点击监听器时,我们使用android:onClick="your_method"
如果您使用XML变体,则必须在app类中实现your_method

答案 11 :(得分:0)

有几个原因可能需要以编程方式设置OnClickListener。首先,如果您想在应用程序运行时更改按钮的行为。您可以将按钮完全指向另一个方法,或者通过设置不执行任何操作的OnClickListener来禁用该按钮。

使用onClick属性定义侦听器时,视图仅在其主机活动中查找具有该名称的方法。以编程方式设置OnClickListener允许您从其主机活动以外的某个位置控制按钮的行为。当我们了解基本上是迷你活动的碎片时,这将变得非常重要,允许您使用自己的生命周期构建可重用的视图集合,然后可以将它们组合成活动。片段始终需要使用OnClickListeners来控制它们的按钮,因为它们不是活动,并且不会搜索onClick中定义的侦听器。

答案 12 :(得分:0)

每个人都提到了OnClickListener一个总是使用的列表器。 我想再添加一个点android:onClick作为方法,它不需要引用,因此当你必须在执行某个任务后添加按钮时它很有用,所以你不能为OnClickListener引用它

对于example当我们创建只包含布局(没有片段)的viewpager时,如果在任何布局中放置一个按钮,只有在布局可见时才进行清理,因此您无法在Button中使用方法findViewById那个案例android:onClick变得有用,只需将该方法放入活动!!

答案 13 :(得分:0)

这是一个简单的术语 如果你在家,你想打电话给某人......你可以直接打电话给他们,他们可以听你说话。 (使用onclick)。但是,如果你在外面,你想在家里打电话给某人,你需要使用手机或互联网。(需要使用onclicklistener)。 在Android中,一切都从家里开始,即。主要活动 这是android缓解你工作的方式;当你有一个活动时,你不必附加一个监听器,创建对象,并定义它。只需使用onClick。 Onclicklistener通常用于Fragments中。 所以保持编码。

答案 14 :(得分:0)

您可能希望以编程方式设置OnClickListener,这有几个原因。首先,如果您想在应用程序运行时更改按钮的行为。您可以完全按照其他方法指向按钮,或者只需设置一个不执行任何操作的OnClickListener来禁用该按钮。

使用onClick属性定义侦听器时,视图仅在其主机活动中查找具有该名称的方法。以编程方式设置OnClickListener允许您从其主机活动以外的某个位置控制按钮的行为。当我们讨论基本上是迷你活动的碎片时,这将变得非常重要,允许您使用自己的生命周期构建可重用的视图集合,然后可以将它们组合成活动。片段总是需要使用OnClickListeners来控制他们的按钮,因为他们不是活动,也不会搜索onClick中定义的听众。

答案 15 :(得分:0)

onclick()setOnClicklisner()之间的主要区别如下:

  1. onclick()
    是xml中的属性。单击按钮时,onclick方法被调用,假设您在布局中有三个按钮,则只能添加onclick()的一个功能,而单击任一按钮时,onclick()就会被调用

  2. setOnClicklistner()
    假设您在布局中有三个按钮要与它们执行不同的操作。然后,您应该在每个按钮上使用setonClicklistner()方法来为其提供不同的方法