作者LaPass (LaPass)
看板AndroidDev
標題Re: [問題] 多個Button的onClick事件
時間Mon Feb 13 20:17:55 2012
※ 引述《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