作者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
1F:推 jakevin:感谢! 这篇厘清不少观念了 02/13 20:21
2F:推 nvidia:好人 02/13 21:38
3F:推 gpc:感人好文推一下 我都懒得打了QQ 02/13 23:06
4F:→ Eior:不用的说法:多型优於使用instanceof 02/14 00:16
5F:→ LaPass:了解了.... 只是,这边是overide,只能这样啊.... 02/14 00:20
6F:→ iincho:这是OO的基本观念吧...感觉上问问题的人Java要回去补一下 02/14 00:52
7F:→ iincho:至於用instatnceof...我的观念是不要把不同种物件放在 02/14 00:56
8F:→ iincho:同一组handler里面处理,直接切开就好, 所以都是直接cast. 02/14 00:56
9F:推 ah7675:推基本观念 不要用instanceof把多形给废了 02/14 02:34
10F:推 mamaya3:原来原po是要问casting啊 我会错意了 02/14 04:35