Android: установить выбор нескольких кнопок на клике - PullRequest
0 голосов
/ 14 декабря 2011

У меня есть набор кнопок:

[Button1]
[Button2]
[Button3]
[Button4]
[Button5]
[Button6]

Все они используют один и тот же метод onClick:

b.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        Button b = (Button) v;
        Button comp;
        int i = b.getId();
        selected[i] = !selected[i];
        b.setSelected(selected[i]);
        for (int j = 0; j < 6; j++) {
            if (i != j) {
                selected[j] = false;
                comp = lifestyleButtonArray.get(j);

                if(comp.isSelected())
                    comp.setSelected(selected[j]);
                    Log.w(TAG,"[Button] selection for button #"+j+"="+selected[j]);

            }
        }
    }
});

Первая часть метода onClick работает как положено. При нажатии кнопки переключите значение «выбор» кнопок, чтобы изменить цвет кнопки (определенный в файле XML для рисования), а затем отмените выбор всех других кнопок, чтобы не более одной кнопки было помечено «выбранной» в время.

Часть выбора работает, но кнопки не перерисованы соответствующим цветом, поэтому кажется, что выбраны две кнопки!

Я пытался сделать недействительными и requestLayout, но это не помогло. Есть предложения?

РЕДАКТИРОВАТЬ: После этой мысли еще раз, реальный вопрос, который следует задать здесь:

Как мне обновить представление, которое не является видом из метода onClick?

В моем примере, когда я выбираю button1, я хочу иметь возможность удалить выборку с кнопок 2-6, но, поскольку кнопки 2-6 не являются вызываемым видом, они показывают правильное выбранное значение (что они не выбраны) ), но не обновляйте их вид пользовательского интерфейса до «не выбранного» цвета!

1 Ответ

0 голосов
/ 15 декабря 2011

После установки выбранного состояния кнопки вы можете вызвать функцию «invalidate ()» для каждой кнопки, чтобы заставить их обновляться в следующем цикле.

...