看板 AndroidDev 關於我們 聯絡資訊
※ 引述《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
jakevin:感謝! 這篇釐清不少觀念了 02/13 20:21
nvidia:好人 02/13 21:38
gpc:感人好文推一下 我都懶得打了QQ 02/13 23:06
Eior:不用的說法:多型優於使用instanceof 02/14 00:16
LaPass:了解了.... 只是,這邊是overide,只能這樣啊.... 02/14 00:20
iincho:這是OO的基本觀念吧...感覺上問問題的人Java要回去補一下 02/14 00:52
iincho:至於用instatnceof...我的觀念是不要把不同種物件放在 02/14 00:56
iincho:同一組handler裡面處理,直接切開就好, 所以都是直接cast. 02/14 00:56
ah7675:推基本觀念 不要用instanceof把多形給廢了 02/14 02:34
mamaya3:原來原po是要問casting啊 我會錯意了 02/14 04:35