Как реализовать различные действия при нажатии одной кнопки несколько раз?
Подскажите способ, чтобы при нажатии на кнопку происходило действие (менялся текст и картинка в 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;
}
}