2012-06-08 4 views
-1

Как я могу создать более одного OnClickListener для одного Button. Предположим, у меня есть приложение, которое начинает запись звука при первом нажатии и прекращает запись при следующем нажатии. Как мне это сделать?Два OnClickListeners для одной кнопки

Я пробовал использовать два OnClickListeners, но это не сработало.

EDIT

Я пытаюсь сделать еще несколько реализаций для моего текущего приложения. Я пытаюсь изменить текст на кнопке во время выполнения, если звук записывается. Я хотел бы, чтобы текст на кнопке говорил «Запись» .. и через 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

Последняя часть о 'B utton' с текстом * Запись ... * и спустя одну секунду с тем же текстом * Запись ... * не имеет смысла (и вы не должны использовать 'Thread.sleep (2000); 'там). Вы пытаетесь каким-либо образом заставить «Button» иметь мигающий текстовый эффект (например, текст «Запись ...» появляется и исчезает с интервалом в 1 секунду?)? – Luksprog

+1

@ AndroidDev93 вы не должны редактировать свой вопрос и превращать его во что-то совершенно другое. Вы должны были начать новый вопрос, теперь вы сделали ответы ниже несущественными для тех, кто сталкивается с этим вопросом. Это не так, как работает сообщество stackoverflow. – Blundell

+0

@Luksprog - Я не пытаюсь получить мигающий текстовый эффект. У кнопки есть текст «Запись ...», и через секунду у него есть текст «Запись». У него на один период меньше. Позвольте мне попытаться быть более понятным. Во время записи звука я хочу изменить текст на кнопке каждую секунду. У меня есть 2 текста 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; 
    } 
} 

Edit:

Смотрите, если код ниже помогает:

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 проверить, если флажок щелкнул и сделать один метод еще сделать другой

@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' paramater на флажок – Blundell

+0

Правда, что, добавьте его в – FabianCook

+0

Opsie daisy, забыли про это извините – FabianCook