作者sweet00914 (别理我)
看板AndroidDev
标题Re: [问题] 多个Button的onClick事件
时间Mon Feb 13 15:28:44 2012
※ 引述《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
1F:→ terrybob:推,学到新技术 02/13 15:29
2F:→ sweet00914:献丑了...0.0 02/13 15:30
3F:推 jakevin:因为我有20个按钮 这样写下去 不是很好维护 冏 02/13 15:36
4F:→ LaPass:我记得onClickListener会把点击的对象传进去,用那个抓按钮 02/13 15:51
5F:→ LaPass:就好 02/13 15:51
6F:→ LaPass:好像就是view,我不太确定..... 写android过後有点久了 02/13 15:53
7F:推 jakevin:我试着输出v.getID() 只能得到布林值?! 02/13 16:01
8F:→ LaPass:现在手上没有开发环境,你帮我试试看这个... 02/13 16:15
9F:→ LaPass:在onClick里加上: 02/13 16:15
10F:推 LaPass:if(v instanceof Butten) ((Butten)v).text = "用V抓到了"; 02/13 16:17
11F:→ LaPass:else log.d("无法抓到"); 02/13 16:18
12F:→ LaPass:Button才对 拼错字 = = 02/13 16:19
13F:→ LaPass:然後,看看会不会成功... 我记得可以这样 02/13 16:19
14F:→ sweet00914:String.valueOf(v.getId())<<<我显示的是数字字串唷 02/13 16:20
15F:→ LaPass:setText("用V抓到了"); 这样才对.... 02/13 16:21
16F:推 jakevin:成功了! 02/13 16:40
17F:推 gpc:好熟的ID 02/13 16:50
18F:推 jakevin:!!!! GPC大! 02/13 16:53
19F:→ Killercat:我实在...不是很鼓励用instanceof运算子 orz 02/13 17:36
20F:推 LaPass:那请问楼上是怎麽判断型别的? 尤其是在转型之前的防错 02/13 17:42
21F:→ Killercat:很简单,不要写出必须要用instanceof的东西 02/14 15:02
22F:→ Killercat:我承认这东西不是100%能避免,但是这往往多半都可以 02/14 15:03
23F:→ Killercat:从设计上来解决。就好像C++里面dynamic_cast往往是不被 02/14 15:04
24F:→ Killercat:鼓励的一样(但是很不幸的,不管怎麽设计其实或多或少 02/14 15:04
25F:→ Killercat:都会碰到那麽1%) 02/14 15:05
26F:→ Killercat:dynamic_cast的问题在於结构杂乱跟效能低下 而 02/14 15:05
27F:→ Killercat:instanceof会不会效能低下我不知道,不过结构多半会有 02/14 15:05
28F:→ Killercat:一些设计上的问题(多半,不是全部)造成维护困扰 02/14 15:06
29F:推 nvidia:用一次就罚五百元 02/14 19:38
30F:推 LaPass:唔.... java在objectstream中,就避免不了型别判断了..... 02/14 20:27
31F:→ LaPass:因为呼叫getobject,指会吐出object出来 02/14 20:28
32F:→ LaPass:那时我是用map<Class,SomeThing> 去处理掉..... 可能会有更 02/14 20:29
33F:→ LaPass:好的办法吧,但我不知道 02/14 20:29
34F:→ Killercat:不,简单的方法就是不要用objectstream传不同型别 02/16 18:55
35F:→ Killercat:ios写多了很多人有一种坏习惯(大概从js来的) 什麽都用 02/16 18:55
36F:→ Killercat:id去包,这个也id那个也id 结果每个都要测测看有没有 02/16 18:55
37F:→ Killercat:response才能丢event. 这根java的instanceof一模一样, 02/16 18:56
38F:→ Killercat:会造成维护上巨大的问题的 =P 02/16 18:56
39F:→ Killercat:outputstream那麽多 很少有什麽理由非得把一堆奇怪的 02/16 18:57
40F:→ Killercat:又不同型别的object得塞到「一个」objectoutputstream 02/16 18:57
41F:→ Killercat:的理由,几乎可以肯定一定是哪里有问题了 :Q 02/16 18:58
42F:→ Killercat:而且自己实作个output/input stream说真的很简单啊... 02/16 18:58
43F:→ iincho:我同意楼上的说法..XD 02/18 08:45
44F:→ iincho:基本上不要把不同的东西混用才是正确的做法... 02/18 08:45