android通過遍歷處理多個按鈕點選事件
阿新 • • 發佈:2019-02-17
如果我們有很多的按鈕都有點選事件的話,那麼單單靠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後那麼我們直接上核心程式碼
通過所獲取的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); } };