android学习之控件的事件监听的四种写法

来源:互联网 发布:猫咪软件 编辑:程序博客网 时间:2024/05/20 07:36

android中很多控件的事件监听都不只有一种写法,这里我以Button为例,为大家展示该控件的四种写法!!!希望能里有利于大家在需要写监听事件的时候有一个更明确的选择。


首先给出本次的xml代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"     android:gravity="center">    <Button        android:id="@+id/button1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="Button" />    <Button        android:id="@+id/button2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="Button" /></LinearLayout>


1)通过匿名类实现事件监听

public class MainActivity extends Activity {//绑定buttonButton btn1 = (Button)findViewById(R.id.button1);Button btn2 = (Button)findViewById(R.id.button2);    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //通过匿名内部类实现button的事件监听        btn1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubToast.makeText(MainActivity.this, "This is Button 111", Toast.LENGTH_SHORT).show();}});        btn2.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubToast.makeText(MainActivity.this, "This is Button 222", Toast.LENGTH_SHORT).show();}});    }}


2)自定义事件监听类

public class MainActivity extends Activity {   Button btn1, btn2;   class MyClickListener implements OnClickListener {     @Override    public void onClick(View v) {      // TODO Auto-generated method stub      switch (v.getId()) {      case R.id.button1:        Toast.makeText(MainActivity.this, "This is Button 111", Toast.LENGTH_SHORT).show();        break;      case R.id.button2:        Toast.makeText(MainActivity.this, "This is Button 222", Toast.LENGTH_SHORT).show();        break;      default:        break;      }    }  }   @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);     btn1 = (Button) findViewById(R.id.button1);    btn2 = (Button) findViewById(R.id.button2);     btn1.setOnClickListener(new MyClickListener());    btn2.setOnClickListener(new MyClickListener());  }}


3)通过MainActivity类实现OnClickListener接口来完成对控件的事件监听

public class MainActivity extends Activity implements OnClickListener {Button btn1 = null;Button btn2 = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn1 = (Button)findViewById(R.id.button1);btn2 = (Button)findViewById(R.id.button2);//Onclick方法在哪个类中那么监听事件的参数就是那个类btn1.setOnClickListener(this);btn2.setOnClickListener(this);}//btn1.setOnClickListener(l);@Overridepublic void onClick(View v) {// TODO Auto-generated method stub      switch (v.getId()) {      case R.id.button1:        Toast.makeText(MainActivity.this, "This is Button 111", Toast.LENGTH_SHORT).show();        break;      case R.id.button2:        Toast.makeText(MainActivity.this, "This is Button 222", Toast.LENGTH_SHORT).show();        break;      default:        break;      }}}


4)在XML文件中“显示指定按钮的onClick属性,这样点击按钮时会利用反射的方式调用对应Activity中的click()方法”

public class zhulei extends Activity implements OnClickListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}//不需要@Overridepublic void onClick(View v) {// TODO Auto-generated method stub      switch (v.getId()) {      case R.id.button1:        Toast.makeText(MainActivity.this, "This is Button 111", Toast.LENGTH_SHORT).show();        break;      case R.id.button2:        Toast.makeText(MainActivity.this, "This is Button 222", Toast.LENGTH_SHORT).show();        break;      default:        break;      }}}



就这四种方法而言,少量控件使用匿名类比较便捷,较多控件时使用MainActivity 类实现OnClickListener接口的方式更好一些,看起来也更加统一,此外第四种写法将减少在活动中的代码量,但需要在每个控件里添加一条属性,所以大家在选择时可以依情而定。

1 0
原创粉丝点击