Как реализовать различные действия при нажатии одной кнопки несколько раз?

Подскажите способ, чтобы при нажатии на кнопку происходило действие (менялся текст и картинка в ImageView), a при следующем нажатии на эту же кнопку снова происходило действие (менялся текст и картинка в ImageView) и так по кругу. Я вижу это примерно так...

public void onClick(View AppCompatButton) {
    switch (AppCompatButton.getId()) {
        case R.id.btn_left:
            switch (AppCompatButton.гетерТекстаВКнопке()){
                case R.string.level_1_left:
                    svg_main.setImageResource(R.drawable.ic_blue_level_1);
                    svg_left.setImageResource(R.drawable.ic_blue_level_2_left);
                    svg_right.setImageResource(R.drawable.ic_blue_level_2_right);
                    btn_left.setText(R.string.level_2_1);
                    btn_right.setText(R.string.level_2_2);
                    break;
                case R.string.level_2_1:
                    svg_main.setImageResource(R.drawable.ic_red_level_2_left);
                    svg_left.setImageResource(R.drawable.ic_default);
                    svg_right.setImageResource(R.drawable.ic_default);
                    btn_left.setText(R.string.level_3_left);
                    btn_right.setText(R.string.level_4_left);
                    tv.setText(R.string.arrow2);
                    break;
                case R.string.level_3_left:
                    svg_main.setImageResource(R.drawable.ic_default);
                    svg_left.setImageResource(R.drawable.ic_blue_level_1);
                    svg_right.setImageResource(R.drawable.ic_red_level_1);
                    btn_left.setText(R.string.level_1_left);
                    btn_right.setText(R.string.level_1_right);
                    tv.setText(R.string.arrow);
                    break;

Ответы (2 шт):

Автор решения: puffleeck

попробуйте обернуть цикл в генератор. генератор по сути является обычной функцией с некоторыми "но":

function abc(x=1){rerutn ++x;} // функция
abc(); // 2
abc(); // 2
abc(); // 2


function* def(x=1){
  yield ++x;
  yield ++x;
  yield ++x;
  yield ++x;
} // генератор
def(); // 2
def(); // 3
def(); // 4

подробнее почитать можно тут: https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Statements/function*

function* xyz(){
 var qwe =[
  ['img_name1.jpg', 'text1'],
  ['img_name2.jpg', 'text2'],
  ['img_name3.jpg', 'text3']
 ];
 var i=-1;
 while(qwe[++i]){yield qwe[i];}
}

qwe(); // {[img1, text1], false}
qwe(); // {[img2, text2], false}
qwe(); // {[img3, text3], true}

впрочем... можно поступить проще:

var abc = [ // массив со всеми возможными вариантами
['img_m0', 'img_l', 'img_r', 'btn_l', 'btn_r'],
['img_m1', 'img_l', 'img_r', 'btn_l', 'btn_r', 'tv'],
['img_m2', 'img_l', 'img_r', 'btn_l', 'btn_r', 'tv']
];
var i = 0;

function set_lvl(x){ // сама функция с приемом массива
svg_main.setImageResource(x[0]);
svg_left.setImageResource(x[1]);
svg_right.setImageResource(x[2]);
btn_left.setText(x[3]);
btn_right.setText(x[4]);
tv.setText(x[5]);
return;}

set_lvl(abc[i]); // this lvl
set_lvl(abc[++i]); // lvl up
set_lvl(abc[--i]); // lvl down

ну как то так...

→ Ссылка
Автор решения: Albatross

Нашел решение!

public void onClick(View AppCompatButton) {
  switch (AppCompatButton.getId()) {
    case R.id.btn_left:
      String text = btn_left.getText().toString();
      switch (text) {
        case "Blue line М1":
          svg_main.setImageResource(R.drawable.ic_blue_level_1);
          svg_left.setImageResource(R.drawable.ic_blue_level_2_left);
          svg_right.setImageResource(R.drawable.ic_blue_level_2_right);
          btn_left.setText(R.string.level_2_1);
          btn_right.setText(R.string.level_2_2);
          break;
        case "red M5 \n above \n Blue line":
          svg_main.setImageResource(R.drawable.ic_red_level_2_left);
          svg_left.setImageResource(R.drawable.ic_default);
          svg_right.setImageResource(R.drawable.ic_default);
          btn_left.setText(R.string.level_3_left);
          btn_right.setText(R.string.level_4_left);
          tv.setText(R.string.arrow2);
          break;
        case "red line M1":
          svg_main.setImageResource(R.drawable.ic_default);
          svg_left.setImageResource(R.drawable.ic_blue_level_1);
          svg_right.setImageResource(R.drawable.ic_red_level_1);
          btn_left.setText(R.string.level_1_left);
          btn_right.setText(R.string.level_1_right);
          tv.setText(R.string.arrow);
          break;
      }
      break;

    case R.id.btn_right:
      svg_main.setImageResource(R.drawable.ic_red_level_1);
      svg_left.setImageResource(R.drawable.ic_red_level_2_left);
      svg_right.setImageResource(R.drawable.ic_red_level_2_right);
      btn_left.setText(R.string.level_2_3);
      btn_right.setText(R.string.level_2_4);
      break;


  }

}

→ Ссылка