你的位置:首页 > 操作系统

[操作系统]【lushengduan】03、点击事件的四种实现方式


    好吧,首先我们来解释一下什么“点击事件”,所谓“点击事件”就是当我们点击(注意是单击)手机屏幕时,系统做出相应的响应;举个例子哈,你去朋友家里,要告诉你的朋友你到了,你是不是要敲一敲门,然后你朋友听到了就来给你开门了,这个就和我们点击屏幕上的Button很类似,点击的操作相当于敲门,至于“朋友听到”和“开门”这两个行为动作,就是我们今天要探讨的内容了。

    手机没有耳朵,不可能“听到”我们点击了屏幕,因此,需要给Button绑定一个监听器,每当Button被点击了,就去执行某些特定的操作,常用的点击事件的实现方式有四种。

 

一、布局中绑定onClick属性

    上一篇文章大家也接触到了,在Button这个控件里面,设置“android:onClick”属性

  <Button    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:onClick="showToast"    android:text="CLICK ME!"/>

    “onClick”的值将对应载入这个布局的Activity中方法,也就是说如果“android:onClick=“xxx””的话,那么,在HelloWorldActivity里的方法就应该为

  public void xxx(View view){    //Do what you want to do here.  }

    当我们点击Button的时候,就会去执行xxx方法里的代码

 

二、实现OnClickListener接口

    OnClickListener是一个接口,通过implements来onClick这个接口,在onClick这方法里面就可以实现自己的操作了

package com.example.lushengduan.helloworld;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;/** * Created by Lushengduan on 2016/3/4. */public class HelloWorldActivity extends Activity implements OnClickListener {  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.main_layout);  }  @Override  public void onClick(View v) {    //Do what you want to do here.  }}

    看到这里大家会不会有个问题,这个监听器没有明确指定监听哪一个组件,那它是怎么工作的呢?是这样的,我们能通过v.getId()来标识不同的组件,现在为Button增加一个名为“button1”的id

  <Button    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:onClick="showToast"    android:id="@+id/button1"    android:text="CLICK ME!"/>

   那么结合View类里的getid就可以定位到我们点击的Button这个控件,而不是其他地方了,代码如下

  @Override  public void onClick(View v) {    switch (v.getId()){      case R.id.button1:        //To do someThing        break;      default:        break;    }  }

   

三、内部类方式

    Button类里有个方法叫做“setOnClickListener”,这个方法的参数需要的是一个OnClickListener的对象,新建一个内部类实现OnClickListener的接口就行了,在这之前,我们需要通过findViewById的方式拿到Button对象

button = (Button) findViewById(R.id.button1);

   为Button设置监听器

button.setOnClickListener(new MyClickListener());

    然后在onClick方法中执行你想要的操作,完整代码如下

package com.example.lushengduan.helloworld;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;/** * Created by Lushengduan on 2016/3/4. */public class HelloWorldActivity extends Activity {  private Button button;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.main_layout);    button = (Button) findViewById(R.id.button1);    button.setOnClickListener(new MyClickListener());  }  private class MyClickListener implements OnClickListener{    @Override    public void onClick(View v) {      //Do what you what to do here.    }  }}

 

四、匿名内部类方式

    能写成内部类的,可以写成匿名内部类的方式,理解了上面的代码后,那么就很简单,基本是java的基础知识了,直接看代码

package com.example.lushengduan.helloworld;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;/** * Created by Lushengduan on 2016/3/4. */public class HelloWorldActivity extends Activity {  private Button button;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.main_layout);    button = (Button) findViewById(R.id.button1);    button.setOnClickListener(new OnClickListener() {      @Override      public void onClick(View v) {        //Do what you want to do here.      }    });  }}