2011-12-14 2 views
0

У меня есть набор кнопок:Android: установка множественного выбора кнопки OnClick

[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, но это не помогло. Какие-либо предложения?

EDIT: Дав это еще некоторые мысли, вопрос нужно задать здесь:

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

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

+1

Почему вы не позволяете своей деятельности реализовывать onClickListener, а затем переопределяете один метод onClick (View v) для всех ваших кнопок, а затем вы можете переключаться между ними с помощью Switch (v.getId() {case R.id.btn1 : //TODO....break; case R.id.btn2: .... и т. Д. – Houcine

+0

Потому что это все внутри большей активности, которая реализует свой собственный метод onClick, чтобы позаботиться о другой части кода. нужно иметь возможность переключаться между кнопками, хотя мне нужно уметь устанавливать значение выбора для кнопки и повторно рисовать. –

ответ

0

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

+0

Пробовал, что не работал, потому что он выходит за рамки представления, которое было нажав, недействительные вызовы не обновляют пользовательский интерфейс. –

Смежные вопросы