Android按钮事件的几种写法

Android按钮事件的几种写法

本文对几种常用的Android按钮点击事件进行简单的汇总说明:

首先,我们定义一个简单的按钮布局:

<Button 
    android:id="@+id/btn_a"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="btn_b"/>

<Button 
    android:id="@+id/btn_b"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="btn_b"/>

在代码中我们可以有如下四种方法定义按钮的点击事件:

1、匿名内部类

public class ButtonActivity extends Activity {
 Button btn_a, btn_b;

 @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test_button);

     //首先定义两个按钮
   btn_a= (Button) findViewById(R.id.btn_a);
   btn_b= (Button) findViewById(R.id.btn_b);

     //然后用匿名内部类的方式写点击事件
   btn_a.setOnClickListener(new OnClickListener() {
     @Override
      public void onClick(View v) {
        Toast.makeText(ButtonActivity.this, "btn_a clicked !", Toast.LENGTH_SHORT).show();
     }
    });

   btn_b.setOnClickListener(new OnClickListener() {
   @Override
      public void onClick(View v) {
        Toast.makeText(TestButtonActivity.this, "btn_b clicked !", Toast.LENGTH_SHORT).show();
      }
    });
  }
//-----end of all codes-----
}

2、继承OnClickListener来自定义单击事件

public class ButtonActivity extends Activity {
 Button btn_a, btn_b;

 @Override
  protected void onCreate(Bundle savedInstanceState) 
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test_button);

     //首先定义两个按钮
   btn_a= (Button) findViewById(R.id.btn_a);
   btn_b= (Button) findViewById(R.id.btn_b);

     //然后用匿名内部类的方式写点击事件
   btn_a.setOnClickListener(new myOnClick());
   btn_b.setOnClickListener(new myOnClick());
  }

    //继承OnClickListener
  class myOnClick implements OnClickListener{
    @Override
    public void onClick(View v) 
    {
        switch (v.getId()) {
          case R.id.btn_a:
            Toast.makeText(ButtonActivity.this, "btn_a clicked!", Toast.LENGTH_SHORT).show();
            break;
          case R.id.button2:
            Toast.makeText(ButtonActivity.this, "btn_b clicked !", Toast.LENGTH_SHORT).show();
            break;
          default:
            break;
         }
    }
  }
//-----end of all codes-----
}

3、通过重写Click来自定义单击事件

public class ButtonActivity extends Activity {
 Button btn_a, btn_b;

 @Override
  protected void onCreate(Bundle savedInstanceState) 
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test_button);

     //首先定义两个按钮
   btn_a= (Button) findViewById(R.id.btn_a);
   btn_b= (Button) findViewById(R.id.btn_b);

     //然后用匿名内部类的方式写点击事件
   btn_a.setOnClickListener(this);
   btn_b.setOnClickListener(this);
  }

 @Override
  public void onClick(View v) {
    switch (v.getId()) {
    case R.id.btn_a:
      Toast.makeText(ButtonActivity.this, "btn_a clicked!", Toast.LENGTH_SHORT).show();
      break;
    case R.id.btn_b:
      Toast.makeText(ButtonActivity.this, "btn_b clicked!", Toast.LENGTH_SHORT).show();
      break;
    default:
      break;
    }
  }
//-----end of all codes-----
}

4、在xml文件中定义按钮的单击事件

<Button 
    android:id="@+id/btn_a"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="btn_b"
    android:onClick="onClick"/>

<Button 
    android:id="@+id/btn_b"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="btn_b"
    android:onClick="onClick"/>
public class ButtonActivity extends Activity {
 Button btn_a, btn_b;

 @Override
  protected void onCreate(Bundle savedInstanceState) 
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test_button);
  }

  public void onClick(View v) {
    switch (v.getId()) {
    case R.id.btn_a:
      Toast.makeText(ButtonActivity.this, "btn_a clicked!", Toast.LENGTH_SHORT).show();
      break;
    case R.id.btn_b:
      Toast.makeText(ButtonActivity.this, "btn_b clicked!", Toast.LENGTH_SHORT).show();
      break;
    default:
      break;
    }
  }
//-----end of all codes-----
}

以上四种按钮单击事件中,第一种最为常见,在界面按钮较少或者程序较为简单的时候,用匿名内部类的方法可以比较快速的完成点击事件处理,而当按钮非常多的时候,匿名内部类会导致你的代码非常冗余;第二种及第三种方法能够较好的将控件定义和事件处理进行分离,有较好的可读性、可维护性;第四种直接写在布局文件中的方法从代码量来说是最少的,但带来的问题就是程序的可读性大大下降,因为事件处理的函数并没有在.java文件中进行调用,不知道的人可能会比较迷糊,而且从界面上进行函数跳转查看也不是一种非常简单的方法吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值