一个Button的两个OnClickListeners

时间:2012-06-08 19:57:29

标签: android event-handling buttonclick onclicklistener

如何为一个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;

 }


    }
});

3 个答案:

答案 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

    }