Android开发 多次点击按钮实现不同的功能
有10个按钮,第一次点击按钮的时候会播放语音,并且实现页面的跳转,但是以后再次点击该按钮的时候,则不播放语音,直接跳转。如果只有一个按钮还比较好实现,但是按钮比较多,需要...
有10个按钮,第一次点击按钮的时候会播放语音,并且实现页面的跳转,但是以后再次点击该按钮的时候,则不播放语音,直接跳转。如果只有一个按钮还比较好实现,但是按钮比较多,需要区分不同的按钮,这个要怎么实现?有没有相关的代码作为例子?
可以用比较繁琐简单的方法实现,有没有比较系统化的集成方法? 展开
可以用比较繁琐简单的方法实现,有没有比较系统化的集成方法? 展开
5个回答
展开全部
可以声明一个按钮的集合,再声明一个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(){
就好了
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(){
就好了
展开全部
实现按钮监听的实现类,并在实现类中定义标记变量,根据变量值执行不同的方法。
示例:
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个不同的功能
}
});
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
既然一个按钮可以实现,那理论上讲,10个按钮也是一样的,这每个按钮都有自己的listener,他们是不一样的,都仿照着那个已经实现了的按钮写不就行了吗
追问
这样是可以,但是比较繁琐,有没有比较简洁的方法?
追答
没有想到更好的方法,每次点击按钮的时候检查按钮是否点击过以及第一次点击按钮的时候需要保持点击记录这两点应该是必须满足的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一次点击以后把listener换掉
或者用一个数组来记录每个按钮是不是第一次按下
或者用一个数组来记录每个按钮是不是第一次按下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
button.settag。这样估计会方便点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询