Activity实现OnclickListener接口的思想和具体用例

转自:http://www.eoeandroid.com/blog-548102-1689.html

关于Activity中继承OnclickListener的说明
    在为组件添加监听事件时,传统的方法是在组件后面加上.setOnclickListener(View.OnClickListener).
    但是这种方法很麻烦,因为每一个组件添加监听事件时都要写相同的代码,而且OnClick方法在下面重写,造成了代码的冗余。下面介绍一种优化代码的方法
    1、在布局文件中把所有组件都定义好,每个组件都要加入相应的id
    2、令Activity实现OnclickListener接口,并重写OnClick()方法
    说明:这里让Activity实现OnClickListener接口之后,再把所有组件添加OnClickListener方法的对象都变成this,这样所有组件监听的对象都是当前的这个Activity
    3、在OnCreate()方法之外单独写一个方法将所有的组件都获取到,如上面的initWidght()方法
    4、在OnClick方法里,根据不同组件的id值,来添加不同的实现,因为所有的组件都是继承自View的,所以通过View.getId可以获取组件的id值,然后在分支语句里添加监听事件里要执行的代码。这样的方法优化了代码,相当于将多个组件的监听事件的代码通过让Activity继承OnClickListener之后,通过判断不同组件的id值集合到一个OnClick事件里写了。

    5、因为所有组件都是View类的子类,所以在传统方法中,将组件获取之后在后面添加.setOnclickListener(View.OnClickListener).相当于调用了父类(View这个类)的OnClick方法,而通过让Activity继承OnclickListener方法之后,在Activity里重写onClick方法则可以将各个组件的监听事件的代码集合在一起
    6、具体的例子请看代码,代码中共添加了五个按钮的事件监听

MainActivity的代码:

package com.hcbosion.activityimplementsonclicklistener;

import android.R.integer;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener{
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        initWidght();//调用方法初始化各个组件
    }

    public void initWidght(){
     findViewById(R.id.Btn1).setOnClickListener(this);//注意:这里监听事件的对象一定要设置为this
     findViewById(R.id.Btn2).setOnClickListener(this);
     findViewById(R.id.btn3).setOnClickListener(this);
     findViewById(R.id.btn4).setOnClickListener(this);
    }
 @Override
 public void onClick(View v) {
  int ItemId = v.getId();//获取组件的id值
  switch (ItemId) {
  case R.id.Btn1:        //根据不同的id值,为不同的组件添加不同的监听事件的实现代码
   Toast.makeText(MainActivity.this, "你点击了Button1", Toast.LENGTH_SHORT).show();
   break;
  case R.id.Btn2:
   Toast.makeText(MainActivity.this, "你点击了Button2", Toast.LENGTH_SHORT).show();
   break;
  case R.id.btn3:
   Toast.makeText(MainActivity.this, "你点击了Button3", Toast.LENGTH_SHORT).show();
   break;
  case R.id.btn4:
   Toast.makeText(MainActivity.this, "你点击了Button4", Toast.LENGTH_SHORT).show();
  default:
   break;
  }

 }
}

布局文件的代码,这里在一个LinearLayout布局中添加了一个TextView组件和四个Button组件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="
http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:layout_gravity="center_horizontal">

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/textview1"
        android:id="@+id/textView1"
        android:layout_marginTop="20dip"/>
 <Button
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="Button1"
     android:textSize="20dip"
     android:id="@+id/Btn1"
     android:layout_marginTop="20dip"/>
 <Button
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:textSize="20dip"
     android:text="Button2"
     android:id="@+id/Btn2"
     android:layout_marginTop="20dip"/>
 <Button
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:textSize="20dip"
     android:text="Button3"
     android:id="@+id/btn3"
     android:layout_marginTop="20dip"/>
 <Button
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:textSize="20dip"
     android:text="Button4"
     android:id="@+id/btn4"
     android:layout_marginTop="20dip"/>
</LinearLayout>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值