android通过遍历处理多个按钮点击事件

如果我们有很多的按钮都有点击事件的话,那么单单靠switch case是很麻烦的,因为你需要在每个case后面加上一个R.id.xx。这样的代码看起来不整洁也很麻烦。那么如果我们使用遍历的方法来处理的话就是方便许多。首先我们先来了解一下获取控件id的方式:

1:反射:

try{
 
 Field field=R.drawable.class.getField(type);
 
 int i= field.getInt(new R.drawable());
 
 Log.d(tag,i+"");
 
 return i;
 
}catch(Exception e){
 
 Log.e(tag,e.toString());
 
 return R.drawable.unknow;
 
}

type是一个变量,他的可能值会是“close”、“edit”、“icon”等。我们通过java的反射类Field 去访问 R.drawable 类下面的某个字段。实际上,我们知道在R.drawable 下的字段就是 res.drawable-xxxx 目录下的图片文件的资源id。因此运行上面的这段代码,其实就是通过一个字符串去获取对应图片文件的资源id。比如,当 type 的值为“icon”时,上面的代码会获得res.drawable-xxxx目录下的 icon.png 图片文件的资源id并返回给我们。我们通过资源 id 来把图片显示在ImageView中就是顺理成章的事了。

2、使用Resources 类的 getIdentifier方法

Resources res=getResources();
 
return res.getIdentifier(A1,"id",getPackageName());
第一个是字段,也就是你所要查找的id的ID的名字如 public static final int A1=0x7f09004e;中type的值就是A1,而第二个参数就是所处类的名字,我们知道在R.java中有很多的类,其中包括drawable、id等,而A1在类id中所以所对应的类也就是id了。第三个参数是类的包名,使用
getPackageName()直接返回所在类的包名

在知道如何获取控件的id后那么我们直接上核心代码

public void onClick(View v) {
		 //创建新的线程
		final int id=v.getId();
        new Thread(){
            @Override
            public void run() {//处理耗时间的操作
                super.run();
               senddata(id);
            }
        }.start();	
	}
	//遍历id
	public void senddata(int id){
		Resources res=getResources();
		String are="";
		for(int i=1;i<17;i++){//判断所点击的id与控件中的哪个id相同,若相同则作出相应处理
			if(id==res.getIdentifier("A"+i,"id",getPackageName())){
				are="A"+i;
			}else if(id==res.getIdentifier("B"+i,"id",getPackageName())){
				are="B"+i;
		}else if(id==res.getIdentifier("C"+i,"id",getPackageName())){
			are="C"+i;
	}else if(id==res.getIdentifier("D"+i,"id",getPackageName())){
		are="D"+i;
	}
	}//利用message发送消息
		 Message message = Message.obtain();
	        message.obj=are;
	        mHandler.sendMessage(message);
  }
	//使用handler接收来自message传过来的值
	 Handler mHandler = new Handler(){
	        /**
	         * handleMessage接收消息后进行相应的处理
	         * @param msg
	         */
	        @Override
	        public void handleMessage(Message msg) {
	            super.handleMessage(msg); 
	            Intent intent=new Intent();
	    		intent.setClass(Main.this, MainActivity.class);
	    		intent.putExtra("user",user);
	    		intent.putExtra("area",(String)msg.obj);
	    		startActivity(intent);
	        }
	    };
通过所获取的id来对所有的控件进行判断,然后进行相应处理;
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值