Как настроить ToggleButton для изменения текста?

160
15 июля 2017, 06:55

Доброго дня!

Имеем: 6 Button, 1 ToggleButton, 1 TextView, и массив Array. При нажатии одной из 6 кнопок, в TextView показывается информация. Если перевести ToggleButton в значение true, при нажатии на эти же 6 кнопок будет выходит противоположная информация. Все данные для TextView берутся из массива.

Теперь столкнулся с такой проблемой. Я нажимаю кнопку (например btnP) и в TextView выходит текст. После этого я нажимаю на ToggleButton и на экране ничего не происходит. Потом я снова нажимаю на эту же btnP и выводится другая информация.

Как сделать так, что бы при нажатии ToggleButton информация уже показанная в TextView сразу менялась на противоположную?

Bundle extraArray = getIntent().getBundleExtra("extraArray");
    ArrayList<Integer> Array = (ArrayList<Integer>) extraArray.getSerializable("Array");
    assert Array != null;
    TextView.setText(Array.get(1));
    iP = 1;
    iL = 3;
    iC = 5;
    iT = 7;
    iH = 9;
    iW = 11;
}
@Override
public void onClick(View v) {
    Bundle extraArray = getIntent().getBundleExtra("extraArray");
    ArrayList<Integer> Array = (ArrayList<Integer>) extraRunes.getSerializable("Array");
    assert Array != null;
    switch (v.getId()) {
        case R.id.btnP:
            TextView.setText(Array.get(iP));
            break;
        case R.id.btnL:
            TextView.setText(Array.get(iL));
            break;
        case R.id.btnC:
            TextView.setText(Array.get(iC));
            break;
        case R.id.btnT:
            TextView.setText(Array.get(iT));
            break;
        case R.id.btnH:
            TextView.setText(Array.get(iH));
            break;
        case R.id.btnW:
            TextView.setText(Array.get(iW));
            break;
    }
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    boolean checked = tbFlip.isChecked();
    Bundle extraArray = getIntent().getBundleExtra("extraArray");
    ArrayList<Integer> Array = (ArrayList<Integer>) extraRunes.getSerializable("Array");
    if (checked) {
        assert Array != null;
        iP = 2;
        iL = 4;
        iC = 6;
        iT = 8;
        iH = 10;
        iW = 12;
    } else {
        assert Array != null;
        iP = 1;
        iL = 3;
        iC = 5;
        iT = 7;
        iH = 9;
        iW = 11;
    }
Answer 1

При клике вам нужно запоминать, какая кнопка была нажата и в onCheckedChanged самостоятельно устанавливать изменённый текст в TextView в соответствии с нажатой ранее кнопкой.

Плюс, переписал немного ваш код:

// Глобальные переменные
private static final int iP = 1;
private static final int iL = 3;
private static final int iC = 5;
private static final int iT = 7;
private static final int iH = 9;
private static final int iW = 11;
private List<Integer> Array;
private int clickedButtonIndex = iP;
private int checked = 0;
// Видимо внутри onCreate
Array = (List<Integer>) extraRunes.getSerializable("Array");
assert Array != null;
setText();
@Override
public void onClick (View v){
    switch (v.getId()) {
        case R.id.btnP:
            clickedButtonIndex = iP;
            break;
        case R.id.btnL:
            clickedButtonIndex = iL;
            break;
        case R.id.btnC:
            clickedButtonIndex = iC;
            break;
        case R.id.btnT:
            clickedButtonIndex = iT;
            break;
        case R.id.btnH:
            clickedButtonIndex = iH;
            break;
        case R.id.btnW:
            clickedButtonIndex = iW;
            break;
    }
    setText();
}
@Override
public void onCheckedChanged (CompoundButton buttonView,boolean isChecked){
    checked = tbFlip.isChecked() ? 1 : 0;
    setText();
}
private void setText() {
    TextView.setText(Array.get(clickedButtonIndex + checked));
}

Только в Java принято имена переменным давать с маленькой буквы.

READ ALSO
Настройка метода registerGlobalAuthentication

Настройка метода registerGlobalAuthentication

Как мне сделать, что б при входе на сайт сначало проверяло inMemoryAuth, и если юзера там нету, то уже через UserDetailsServiceВот мой вариант кода:

213
не подключается файл mystyle.css

не подключается файл mystyle.css

Пишу тему на wordpressПодключил сторонние библиотеки все нормально, а мой файл со стилями не срабатывает

272
Не работает gulp-dirty-markup

Не работает gulp-dirty-markup

Pug компилирует html в одну строку:

252