2012-02-16 3 views
11

Я знаю, что это вопрос, который был задан много раз раньше, но я не могу решить его в своем коде. У меня две кнопки, и когда один нажат, я хотел бы сохранить его в выбранном состоянии и наоборот. Я попытался сделать это, но setSelected и setPressed, но я не могу заставить его работать. Вот код, я использую:держите кнопку андроида выбранным состоянием

region_button.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      objects = category; 
      adap.notifyDataSetChanged(); 
      proximity_button.setPressed(false); 
      region_button.setPressed(true); 

     } 
    }); 

    proximity_button.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      objects = proximity; 
      adap.notifyDataSetChanged(); 
      region_button.setPressed(false); 
      proximity_button.setPressed(true); 

     } 
    }); 

Edit: На основе комментариев, мне нужно добавить, что у меня есть пользовательские XML-фон для кнопок, и хотел бы сохранить нынешний вид.

+1

Почему бы вам просто не использовать RadioGroup и RadioButton, а затем установить правильные атрибуты для своих RadioButtons, используя селектор, это должно сделать трюк! – Cehm

ответ

16

Хорошо, так что я использовал функцию поиска Google в Интернете: р и я нашел на следующие: This threa don StackOverflow...

mycodes_Button.setOnTouchListener(new OnTouchListener() { 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       mycodes_Button.setPressed(true); 
       return true; 
      } 
     }); 

Но прочитать комментарий, это очень интересно!

+0

Почти правое - только для справки другого, другое состояние кнопки также должно быть установлено на false, но я все равно соглашусь, потому что это привело меня к правильному пути. Благодаря! – coder

+4

с использованием setSelected (http://stackoverflow.com/a/3417158/667834) работал лучше для меня, поэтому я мог по-прежнему иметь функциональность при выпуске – richy

3

Почему вы используете кнопки? CheckBox или RadioGroup является лучшим решением для этого случая

checkBox.setChecked(false); 
+1

Нет, если вам не нравится пользовательский интерфейс флажков. –

+2

Вы можете изменить его на все, что хотите –

+0

В зависимости от потребностей, да, вы могли бы. –

1

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

0

Флажок может работать, но если вы после UI ближе UISegmentedControl на прошивку, что возможно оборачивать все кнопки, необходимые в LinearLayout, то вы могли бы сделать что-то вдоль линий:

public void onClick(View v){ 
    if (v.getID == R.id.btn1) { 
     btn1.setEnabled(false); 
     btn2.setEnabled(true); 
     // do stuff 
    } 
    else if (v.getId() == R.id.btn2) { 
     btn2.setEnabled(false); 
     btn1.setEnabled(true); 
     // do stuff 
    } 
} 

Конечно, в вашей папке с выделением вы добавляете цвет фона, границы и другие визуальные материалы для каждого состояния.

+0

Я ищу похожее на NSSegmentedControl на iOS, но проблема с вашим решением - это некоторая кнопка не включена, щелчок по ней снова ничего не сделает. – coder

+0

@coder Вот идея UIsegmentedControl (мой плохой ранее для опечатки). Чтобы снова включить отключенную кнопку, нужно нажать другую. Он функционирует точно так же, как и радиогруппа. –