Изменить метод onClick кнопки программно?

#android

#Android

Вопрос:

У кнопки уже есть метод в xml:

 android:onClick="playSound"
  

Я создал метод в activity:

 public void playSound (View view){ //code1 }
  

Я хочу, чтобы при нажатии кнопки менялся onClick существующий метод в activity,

 public void pauseSound(View view){ //code2 }
  

и когда я нажимаю кнопку снова, я хочу onClick вернуться к исходному методу,

 public void playSound (View view){ //code1 }
  

Подсказка: я использую несколько кнопок для одного и того же метода playSound

Комментарии:

1. Просто используйте логическую переменную в качестве держателя статуса.

2. Вероятно, вы можете использовать переменную в качестве флага и вызывать различные методы изнутри вашего playSound .

3. я пытался использовать логическое значение, прежде чем публиковать свой вопрос, но оно не выполняется динамически с несколькими кнопками (как я использую в своем приложении)

Ответ №1:

Определите переменную ( int / bool ), используйте ее в качестве флага и вызывайте методы по мере необходимости.

 bool flag = 0;

public void playSoundHandler (View view){ 
    if (flag) playSound(view);
    else pauseSound(view);
}

playSound (View view) {
    // Your code
    flag = 1;
}

pauseSound (View view) {
    // Your code
    flag = 0;
}
  

и установить onClick="playSoundHandler" .

Редактировать


В случае, если вы не можете изменить свой playSound метод, поскольку он используется несколькими кнопками, вы можете сделать следующее:

 bool flag = 0;

public void playSoundHandler (View view){ 
    if (!flag) {
        playSound(view);
        flag = 1;
    } else {
        pauseSound(view);
        flag = 0;
    }
}

playSound (View view) {
    // Your code
}

pauseSound (View view) {
    // Your code
}
  

и установить onClick="playSoundHandler" для этой конкретной кнопки.

Комментарии:

1. я использую несколько кнопок в одном и том же методе «PlaySound», это решение не выполняется динамически с несколькими кнопками

2. @boody Если вам нужны разные флаги для разных кнопок, сохраните массив логических флагов. Если вы говорите, что множество кнопок обращаются к вашему playSound() методу, и вы не хотите его менять, тогда посмотрите на последнюю правку. Если это не так, возможно, вам потребуется объяснить вашу проблему немного подробнее.