Re: [問題] 多個Button的onClick事件

看板AndroidDev作者 (LaPass)時間14年前 (2012/02/13 20:17), 編輯推噓5(505)
留言10則, 8人參與, 最新討論串5/5 (看更多)
※ 引述《jakevin (真。假凱文)》之銘言: : 版友們午安 : 不知道有沒有人做過多個按鈕群組的onClick事件 : 今天我的問題是 : [1] [2] [3]....[10] 共十個按鈕 : 每個按鈕執行一個相同的事件就是 按鈕字改成"你好" : 我在main.xml 把每個按鈕都加入了 android:onClick="myClickHandler" : 但現在問題來了 : 我要怎麼知道是哪一個按鈕按下去的? : public void myClickHandler(View target) { : // Do stuff : } : 我可以從taget中得知是哪個按鈕按下去的,但是我不知道該怎麼去對taget下指令 : 比方說 target.setText("你好"); : 想請問這該如何處理是好? : 謝謝大家 一行結束: ((Button)target).setText("你好"); 為什麼推文會用到switch、for、if 之類的呢.....? 頂多再加上一些防呆、防意外狀況之類的就很多了 if(target instanceof Button) ((Button)target).setText("你好"); else /* 被點擊的不是Button時所做的措施 */ 還有,判斷物件型別,我只知道用instanceof,以及 Object.class 推文中有人推不要用instanceof 我很想知道為什麼,難道是有什麼代價或是BUG嗎? 如果有別的方法,非常歡迎指教。 自己的經驗是.... 要向下轉型前要先判斷 不然程式結構改了的話會很麻煩 總之,以後還是會很常用到型別判斷就是了 ======================================================== 以下是解說: public void onClick(View v) { /* ............. */ } 裡面傳進來一個View,這個View到底是什麼東西呢? 我懶的講,不知道的話,在用Eclipse時,把滑鼠移到onClick上面去 裡面應該有一行: Parameters v The view that was clicked. 可能還是有人說.... 我又不知道View是什麼,怎麼知道該怎麼用? 總之,在你看到一個新的型別、介面、物件的時候 請養成一個習慣 滑鼠點一下Button (型別的字) 右鍵 => 快速類型階層 如果連滑鼠右鍵都懶得按的話,可以在點一下那個字後,再按ctrl + T 接著會看到那個物件的繼承圖 Object > View > TextView > Button 這樣一路繼承下來的 這地方的觀念可以去找Java關於物件導向的章節去看 請務必搞懂,這是Java的精隨 (Button)target 這樣子只是把target下向轉型而已 把View轉成Button之後,當然有.setText() 可以用 因為 setText() 是從TextView繼承而來的 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.233.152.130

02/13 20:21, , 1F
感謝! 這篇釐清不少觀念了
02/13 20:21, 1F

02/13 21:38, , 2F
好人
02/13 21:38, 2F

02/13 23:06, , 3F
感人好文推一下 我都懶得打了QQ
02/13 23:06, 3F

02/14 00:16, , 4F
不用的說法:多型優於使用instanceof
02/14 00:16, 4F

02/14 00:20, , 5F
了解了.... 只是,這邊是overide,只能這樣啊....
02/14 00:20, 5F

02/14 00:52, , 6F
這是OO的基本觀念吧...感覺上問問題的人Java要回去補一下
02/14 00:52, 6F

02/14 00:56, , 7F
至於用instatnceof...我的觀念是不要把不同種物件放在
02/14 00:56, 7F

02/14 00:56, , 8F
同一組handler裡面處理,直接切開就好, 所以都是直接cast.
02/14 00:56, 8F

02/14 02:34, , 9F
推基本觀念 不要用instanceof把多形給廢了
02/14 02:34, 9F

02/14 04:35, , 10F
原來原po是要問casting啊 我會錯意了
02/14 04:35, 10F
文章代碼(AID): #1FEFztub (AndroidDev)
文章代碼(AID): #1FEFztub (AndroidDev)