如何为一个OnClickListener
创建多个Button
。假设我有一个应用程序,在第一次单击时开始录制音频,并在下一次单击时停止录制。我该怎么做呢?
我尝试使用两个OnClickListeners
,但这不起作用。
修改
我正在尝试为我当前的应用程序进行更多实现。如果音频正在录制,我试图在运行时更改按钮上的文本。我希望按钮上的文字说录音..并且在1秒后它应该说录音....这应该在音频录制的整个时间发生。我试过实现这个,但我无法让它工作。这是我的代码:
audio.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(audioRecording == false){
audio.setText("Recording..");
startRecording();
audioRecording = true;
while(!audio.isPressed()){
audio.setText("Recording...");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
attachVoice.setText("Recording..");
}
}
else{
audio.setText("Press to Record");
stopRecording();
audioRecording = false;
}
}
});
答案 0 :(得分:7)
你可以做很多方法,关键是你必须以某种方式保存你的应用程序的状态。这是一个简单的例子:
boolean audioRecording = false;
public void onButtonClick(View v){
if(audioRecording){
stopRecording();
audioRecording = false;
} else {
recordAudio();
audioRecording = true;
}
}
答案 1 :(得分:5)
只需实施一个标志即可知道您处于什么状态:
boolean status = true;
//...
//the Button OnCLickListener callback
public void onClick(View v) {
if (status) {
//start the player
status = false;
} else {
// stop the player
status = true;
}
}
修改:
查看以下代码是否有帮助:
boolean playerStatus = true;
boolean updaterStatus = true;
String[] recStrings = { "Recording..", "Recording.........." };
int i = 0;
// ...
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
final Button b = (Button) v;
if (playerStatus) {
playerStatus = false;
// start player
updaterStatus = true;
updateButton(b);
} else {
// end player
playerStatus = true;
updaterStatus = false;
b.setText("Not recording");
}
}
});
和updateButton
方法:
private void updateButton(final Button btn) {
if (updaterStatus) {
btn.setText(recStrings[i % 2]);
i++;
btn.postDelayed(new Runnable() {
@Override
public void run() {
updateButton(btn);
}
}, 1000);
}
}
答案 2 :(得分:0)
对于你所解释的,按钮应该是一个双状态按钮,就像一个复选框,你可以改变与复选框相关的drawable,看看这里:
http://www.anddev.org/tutorial_change_look_of_checkbox-t4553.html
基本上使用onClick方法中的复选框,您可以检查是否单击了复选框并执行其他方法
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(((CheckBox)v).isChecked())
method1();
else
method2();
}
private void method2() {
// TODO Auto-generated method stub
}
private void method1() {
// TODO Auto-generated method stub
}