Android中的事件处理(setOnClickListener)

时间:2015-01-15 11:52:08

标签: android events

我是Java和Android开发的新手。我找到了一个使用以下语句的示例。

sButton.setOnClickListener(this);

在Activity的onCreate()方法中,该方法实现了View.OnClickListener,其中sButton是一个Button变量。据我所知,这会注册on click事件处理程序 稍后的样本

 public void onClick(View v) {
    if(v.getId() == R.id.button_s)
    {
    //some work
    }
发生了这种情况。 我的问题是它是否使用了这个'活动内部的关键字不应该传递类Activity的对象吗?如果发生这种情况,那么按钮ID永远不会匹配。

我知道还有其他方法可以实现Button click。

我对C#和Windows Phone有一点经验。这个过程是为各个按钮调用方法而不需要注册它们。

事件处理程序和监听器之间有什么区别?

任何帮助将不胜感激!感谢

3 个答案:

答案 0 :(得分:2)

OnClickListener(在本例中为Activity实例)用于在消耗click事件时声明应用程序的行为。但是,应用程序的Main(UI)线程会注册所有(UI)事件,并将相应的View对象作为参数分发给onClick(View v)函数。

您提供的代码段 - sButton.setOnClickListener(this)只是指示您的应用程序使用您的“活动”实施中的已实施OnClickListener来响应用户点击。它不会将this实例作为参数转发给onClick()函数,Android操作系统会这样做。

总之:View v函数中的onClick(View v)参数将与用户点击的View对应,而不管OnClickListener附加到View performClick() {1}}

编辑:This(可能是过时的)Android的ViewmOnClickListener.onClick(this)方法的源代码。正如您所看到的,在该方法内部,如果附加了侦听器,则会调用onClick(),这就是将已单击的视图转发到相应onClickListener对象的{{1}}方法的方式

答案 1 :(得分:1)

一个在

之下
Button btn_stop=(Button) findViewById(R.id.btn_stop);
btn_stop.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                }
            }
        });

其次是通过XML android:onClick =" doClick"

下面是活动代码

public void doClick(View v)
{

}

答案 2 :(得分:1)

当你这样做时

sButton.setOnClickListener(this);

this确实是Activity的一个实例。但它被宣布为

MyActivity extends Activity implements View.OnClickListener

重要的是它实现了setOnClickListener作为参数的接口。这就是为什么它有效,this被视为OnClickListener,无论是否为Activity

至于事件处理程序和侦听器之间的区别,请参阅this question