Android开发 多次点击按钮实现不同的功能

有10个按钮,第一次点击按钮的时候会播放语音,并且实现页面的跳转,但是以后再次点击该按钮的时候,则不播放语音,直接跳转。如果只有一个按钮还比较好实现,但是按钮比较多,需要... 有10个按钮,第一次点击按钮的时候会播放语音,并且实现页面的跳转,但是以后再次点击该按钮的时候,则不播放语音,直接跳转。如果只有一个按钮还比较好实现,但是按钮比较多,需要区分不同的按钮,这个要怎么实现?有没有相关的代码作为例子?
可以用比较繁琐简单的方法实现,有没有比较系统化的集成方法?
展开
 我来答
星绰
2013-12-04 · TA获得超过390个赞
知道小有建树答主
回答量:198
采纳率:0%
帮助的人:217万
展开全部
可以声明一个按钮的集合,再声明一个boolean数组,用循环设置监听事件,例如:

private Button[] buttons = new Button[10];
private boolean[] ifPressed = new boolean[10];
private String[] audioPathes = new String[]{第一个语音文件的路径, 第二个语音文件的路径.......};
private int[] idOfButtons = new int[]{R.id.第一个button的id, R.id.第二个button的id, ..... };
private Class[i] classes = new Class[]{xxxxActivity.class, xxxxActivity.class, .......};

oncreat(){
for(int i = 0; i<10; i++){
buttons[i] = (Button) findViewById(idOfButtons[i]);
buttons[i].setOnClickListener(new OnClickListener(){
//因为boolean数组初值为false,所以不用初始化为false,直接调用
if(!ifPressed[i]){
//单独写个方法,传入路径播放语音,用Media或者SoundPool都可以
//如果是播放同一个语音的话就不用加路径参数了,audioPathes也不用了
playAudio(audioPathes[i]);
ifPressed[i] = true;
}
Intent intent = new Intent(MainActivity.this, classes[i]);
startActivity(intent);
finish();//要不要结束当前Activity根据你的app要求吧
});
}
}
大概思路就是这样了,直接在网页上打的,排版不是太好,变量名可能也有打错不一样的,还是先理解了自己写吧,这样才有提高。

刚刚重新看了下,buttons数组可以不要,在循环里直接new一个Button就可以了,把
buttons[i] = (Button) findViewById(idOfButtons[i]);
buttons[i].setOnClickListener(new OnClickListener(){});
替换为:
Button button = (Button) findViewById(idOfButtons[i]);
button.setOnClickListener(new OnClickListener(){
就好了
微测检测5.10
2023-05-10 广告
您好!建议咨 深圳市微测检测有限公司,已建立起十余个专业实验室,企业通过微测检测就可以获得一站式的测试与认 证解决方案;(EMC、RF、MFi、BQB、QI、USB、安全、锂电池、快充、汽车电子EMC、汽车手机互 联、语音通话质量),认证遇... 点击进入详情页
本回答由微测检测5.10提供
woshidaniel
2015-09-08 · TA获得超过9240个赞
知道小有建树答主
回答量:1760
采纳率:96%
帮助的人:953万
展开全部

实现按钮监听的实现类,并在实现类中定义标记变量,根据变量值执行不同的方法。

示例:
        int flag = 0;//定义标记变量
        Button btn = (Button)findViewById(R.id.xxx);//获取按钮
        btn.setOnClickListener(new View.OnClickListener() {//点击实现类
@Override
public void onClick(View v) {
if(flag==0){
   //执行方法1(对应功能1)    
}else if(flag==1){
   //执行方法2(对应功能2)
}else if(flag==2){
   //执行方法3(对应功能3)
}
flag=(flag+1)%3;//其余得到循环执行上面3个不同的功能
}
});
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
慕容冰绡
2013-12-04 · TA获得超过1952个赞
知道小有建树答主
回答量:682
采纳率:50%
帮助的人:521万
展开全部
既然一个按钮可以实现,那理论上讲,10个按钮也是一样的,这每个按钮都有自己的listener,他们是不一样的,都仿照着那个已经实现了的按钮写不就行了吗
追问
这样是可以,但是比较繁琐,有没有比较简洁的方法?
追答
没有想到更好的方法,每次点击按钮的时候检查按钮是否点击过以及第一次点击按钮的时候需要保持点击记录这两点应该是必须满足的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
slim丶风
2013-12-04 · TA获得超过406个赞
知道小有建树答主
回答量:516
采纳率:0%
帮助的人:285万
展开全部
第一次点击以后把listener换掉
或者用一个数组来记录每个按钮是不是第一次按下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
神官0麦依0
科技发烧友

2013-12-04 · 有一些普通的科技小锦囊
知道小有建树答主
回答量:1145
采纳率:75%
帮助的人:374万
展开全部
button.settag。这样估计会方便点
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式