2012-06-08 84 views
-1

我怎么会去创造一个Button多个OnClickListener。假设我有一个应用程序在第一次点击时开始录制音频,并在下次点击时停止录制。我会怎么做呢?两个OnClickListeners一个按钮

我试图用两个OnClickListeners,但没有奏效。

编辑

我试图做一些更多的实现,以我目前的应用程序。如果音频正在录制,我试图在运行时更改按钮上的文本。我希望按钮上的文字说出Recording ..并在1秒后它应该说Recording ...。这应该在音频录制过程中发生。我试图实现这一点,但我无法得到它的工作。这里是我的代码:

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

最后一部分utton'具有文本*录音... *和一秒钟后有相同的文本*录音... *没有任何意义(你不应该使用Thread.sleep(2000); '那里)。你是否试图让'Button'有一个闪烁的文字效果(比如'Recording ...'文字以1秒的间隔出现和消失?)? – Luksprog

+1

@ AndroidDev93你不应该编辑你的问题,并把它变成完全不同的东西。你应该已经开始了一个新的问题,你现在已经把下面的答案与其他任何人碰到这个问题无关。这不是stackoverflow社区的工作方式。 – Blundell

+0

@Luksprog - 我不想闪烁的文字效果。按钮有文字“Recording ...”,一秒钟后有文字“Recording ..”,它有一个周期少了,让我试着更清楚一点,在录制音频时我想改变文字我有两个文本A和B.假设按钮上的文本是A,我希望文本在按钮上停留1秒,然后变为B,并且该循环将继续。 – AndroidDev93

回答

7

你可以做它加载的方式,关键是你无论如何都必须保存您的应用程序的状态。下面是一个简单的例子:

boolean audioRecording = false; 

public void onButtonClick(View v){ 
    if(audioRecording){ 
     stopRecording(); 
     audioRecording = false; 
    } else { 
     recordAudio(); 
     audioRecording = true; 
    } 
} 
+0

从好的一面来看,你的代码有更多有意义的名字:) – Luksprog

+0

很好的方法来解决这个问题。 – AndroidDev93

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); 
     } 
    } 
+0

在我48秒前到达那里,有趣的是我们的代码有多类似,伟大的思想家都认为:p – Blundell

+0

谢谢!那正是我想要的! – AndroidDev93

0

为您解释一下按钮应该是两个国家的按钮,像一个复选框,可以更改与复选框相关的图形内容,请看这里为:

http://www.anddev.org/tutorial_change_look_of_checkbox-t4553.html基本上与在onclick方法的复选框

你是否被点击的复选框,并做一个别的方法做一下`B中的其他

@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 

    } 
+1

如果这个'onClick'是用于复选框的,你可以将'View v'参数投射到复选框 – Blundell

+0

真的吗,生病了吧 – FabianCook

+0

Opsie雏菊,忘了那个抱歉 – FabianCook