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

看板AndroidDev作者 (別理我)時間12年前 (2012/02/13 15:28), 編輯推噓9(9035)
留言44則, 8人參與, 最新討論串2/5 (看更多)
※ 引述《jakevin (真。假凱文)》之銘言: : 版友們午安 : 不知道有沒有人做過多個按鈕群組的onClick事件 : 今天我的問題是 : [1] [2] [3]....[10] 共十個按鈕 : 每個按鈕執行一個相同的事件就是 按鈕字改成"你好" : 我在main.xml 把每個按鈕都加入了 android:onClick="myClickHandler" : 但現在問題來了 : 我要怎麼知道是哪一個按鈕按下去的? : public void myClickHandler(View target) { : // Do stuff : } : 我可以從taget中得知是哪個按鈕按下去的,但是我不知道該怎麼去對taget下指令 : 比方說 target.setText("你好"); : 想請問這該如何處理是好? : 謝謝大家 我的作法: btn1.setOnClickListener(qq); btn2.setOnClickListener(qq); btn3.setOnClickListener(qq); ... ... ... btnN.setOnClickListener(qq); private OnClickListener qq = new OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub switch(v.getId()){ R.id.Btn1: break; R.id.Btn2: break; 以此類推 } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.130.55.241

02/13 15:29, , 1F
推,學到新技術
02/13 15:29, 1F

02/13 15:30, , 2F
獻醜了...0.0
02/13 15:30, 2F

02/13 15:36, , 3F
因為我有20個按鈕 這樣寫下去 不是很好維護 冏
02/13 15:36, 3F

02/13 15:51, , 4F
我記得onClickListener會把點擊的對象傳進去,用那個抓按鈕
02/13 15:51, 4F

02/13 15:51, , 5F
就好
02/13 15:51, 5F

02/13 15:53, , 6F
好像就是view,我不太確定..... 寫android過後有點久了
02/13 15:53, 6F

02/13 16:01, , 7F
我試著輸出v.getID() 只能得到布林值?!
02/13 16:01, 7F

02/13 16:15, , 8F
現在手上沒有開發環境,你幫我試試看這個...
02/13 16:15, 8F

02/13 16:15, , 9F
在onClick裡加上:
02/13 16:15, 9F

02/13 16:17, , 10F
if(v instanceof Butten) ((Butten)v).text = "用V抓到了";
02/13 16:17, 10F

02/13 16:18, , 11F
else log.d("無法抓到");
02/13 16:18, 11F

02/13 16:19, , 12F
Button才對 拼錯字 = =
02/13 16:19, 12F

02/13 16:19, , 13F
然後,看看會不會成功... 我記得可以這樣
02/13 16:19, 13F

02/13 16:20, , 14F
String.valueOf(v.getId())<<<我顯示的是數字字串唷
02/13 16:20, 14F

02/13 16:21, , 15F
setText("用V抓到了"); 這樣才對....
02/13 16:21, 15F

02/13 16:40, , 16F
成功了!
02/13 16:40, 16F

02/13 16:50, , 17F
好熟的ID
02/13 16:50, 17F

02/13 16:53, , 18F
!!!! GPC大!
02/13 16:53, 18F

02/13 17:36, , 19F
我實在...不是很鼓勵用instanceof運算子 orz
02/13 17:36, 19F

02/13 17:42, , 20F
那請問樓上是怎麼判斷型別的? 尤其是在轉型之前的防錯
02/13 17:42, 20F

02/14 15:02, , 21F
很簡單,不要寫出必須要用instanceof的東西
02/14 15:02, 21F

02/14 15:03, , 22F
我承認這東西不是100%能避免,但是這往往多半都可以
02/14 15:03, 22F

02/14 15:04, , 23F
從設計上來解決。就好像C++裡面dynamic_cast往往是不被
02/14 15:04, 23F

02/14 15:04, , 24F
鼓勵的一樣(但是很不幸的,不管怎麼設計其實或多或少
02/14 15:04, 24F

02/14 15:05, , 25F
都會碰到那麼1%)
02/14 15:05, 25F

02/14 15:05, , 26F
dynamic_cast的問題在於結構雜亂跟效能低下 而
02/14 15:05, 26F

02/14 15:05, , 27F
instanceof會不會效能低下我不知道,不過結構多半會有
02/14 15:05, 27F

02/14 15:06, , 28F
一些設計上的問題(多半,不是全部)造成維護困擾
02/14 15:06, 28F

02/14 19:38, , 29F
用一次就罰五百元
02/14 19:38, 29F

02/14 20:27, , 30F
唔.... java在objectstream中,就避免不了型別判斷了.....
02/14 20:27, 30F

02/14 20:28, , 31F
因為呼叫getobject,指會吐出object出來
02/14 20:28, 31F

02/14 20:29, , 32F
那時我是用map<Class,SomeThing> 去處理掉..... 可能會有更
02/14 20:29, 32F

02/14 20:29, , 33F
好的辦法吧,但我不知道
02/14 20:29, 33F

02/16 18:55, , 34F
不,簡單的方法就是不要用objectstream傳不同型別
02/16 18:55, 34F

02/16 18:55, , 35F
ios寫多了很多人有一種壞習慣(大概從js來的) 什麼都用
02/16 18:55, 35F

02/16 18:55, , 36F
id去包,這個也id那個也id 結果每個都要測測看有沒有
02/16 18:55, 36F

02/16 18:56, , 37F
response才能丟event. 這根java的instanceof一模一樣,
02/16 18:56, 37F

02/16 18:56, , 38F
會造成維護上巨大的問題的 =P
02/16 18:56, 38F

02/16 18:57, , 39F
outputstream那麼多 很少有什麼理由非得把一堆奇怪的
02/16 18:57, 39F

02/16 18:57, , 40F
又不同型別的object得塞到「一個」objectoutputstream
02/16 18:57, 40F

02/16 18:58, , 41F
的理由,幾乎可以肯定一定是哪裡有問題了 :Q
02/16 18:58, 41F

02/16 18:58, , 42F
而且自己實作個output/input stream說真的很簡單啊...
02/16 18:58, 42F

02/18 08:45, , 43F
我同意樓上的說法..XD
02/18 08:45, 43F

02/18 08:45, , 44F
基本上不要把不同的東西混用才是正確的做法...
02/18 08:45, 44F
文章代碼(AID): #1FEBklXo (AndroidDev)
討論串 (同標題文章)
文章代碼(AID): #1FEBklXo (AndroidDev)