2015-02-19 2 views
0

Вот так: у меня есть 4 radioButtons, которые не являются членами радиогруппы. Это потому, что RadioGroup по умолчанию помещает детей в вертикальном порядке и не может поместить их относительно друг друга. Теперь я проверю все радиобаты. То, что я хочу достичь, - это контролировать их проверенное состояние, так что когда один проверяется (true), остальные проверенные состояния автоматически устанавливаются на false. Виджеты - это независимые элементы макета, поэтому я думаю, мне нужно найти способ объединить их все вместе. Я попробовал это, закодировав 4 переменные RadioButton с простой if..else if функцией, используя isChecked и setChecked встроенные методы. Затем я попытался группировать их в массив Radiobutton [] и зациклил на array.length с помощью петли switch-case. Ничего не работает. Стек на 2 дня. Любая помощь оценивается.RadioButton isChecked состояние управления андроид

Спасибо за ответ, я объясню далее. У меня есть 4 imageViews и 4 radioButtons точно под каждым, в родительском RelativeLayout, так что пользователь может сделать выбор, какой образ он предпочитает. ImageViews не размещены вертикально, так же как и RadioButtons. Вот почему я не хочу использовать radioGroup. Я мог бы использовать LinearLayout и размещать imageViews в вертикальной ориентации и иметь radioButtons в группе, просто в стороне от них. Каждое проверенное состояние radioButton ложно по умолчанию, и когда я его проверю, становится истинным. Проблема в том, что я могу проверить все radioButtons. То, что я хочу, - это когда я выбираю один RadioButton, остальные автоматически отключены, так что только один может быть проверен в любое время. Вот фрагмент кода:

private RadioButton rbtnWater; 
    private RadioButton rbtnRoad; 
    private RadioButton rbtnBoy; 
    private RadioButton rbtnLeft; 

    rbtnWater = (RadioButton) findViewById(R.id.rbtnWater); 
    rbtnRoad = (RadioButton) findViewById(R.id.rbtnRoad); 
    rbtnBoy = (RadioButton)findViewById(R.id.rbtnBoy); 
    rbtnLeft = (RadioButton) findViewById(R.id.rbtnLeft) 

      //method called at onClick attribute (XML) 
     public void checkState(View v) { 

     if (rbtnWater.isChecked()) { 
      rbtnLeft.setChecked(false); 
      rbtnBoy.setChecked(false); 
      rbtnRoad.setChecked(false); 
     } 
     else if (rbtnLeft.isChecked()) { 
      rbtnBoy.setChecked(false); 
      rbtnWater.setChecked(false); 
      rbtnRoad.setChecked(false); 
     } 
     else if (rbtnBoy.isChecked()) { 
      rbtnWater.setChecked(false); 
      rbtnRoad.setChecked(false); 
      rbtnLeft.setChecked(false); 
     } 
     else if (rbtnRoad.isChecked()) { 
      rbtnWater.setChecked(false); 
      rbtnBoy.setChecked(false); 
      rbtnLeft.setChecked(false); 
     } 
    } 
+0

Но с тем, что не сработало, возникла проблема с ручным массивом и didn Не помещайте фрагмент кода, так что это сложно. –

+0

ok добавлено snipper –

+1

В этом случае «onClick» просто неверно, вам нужно вызвать setOnCheckedChangeListener(), щелчок перед изменением статуса проверки. Также: Никогда не используйте слушателей в атрибутах xml. Это проблематично. –

ответ

1
  • Это не совсем понятно, что не работает, пожалуйста, добавить детали
  • Это, как говорится, я предлагаю вам изменить технику и использовать RadioGroup в любом случае, просто расширить и изменить к чему вам нужно или взять его исходный код от AOSP, и вместо того, чтобы расширять LinearLayout, вы можете продлить что-то еще, вы бы предпочли работать с
+0

отредактировал вопрос для деталей, комментарий был недостаточно –

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