2012-06-08 142 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