1. 程式人生 > >android通過遍歷處理多個按鈕點選事件

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來對所有的控制元件進行判斷,然後進行相應處理;