RadioButton isChecked состояние управления android

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

Спасибо за ответ, поясню дальше. У меня есть 4 изображения и 4 радиокнопки точно под каждым из них в родительском элементе RelativeLayout, чтобы пользователь мог выбрать, какое изображение он предпочитает. ImageViews не расположены вертикально, как и radioButtons. Вот почему я не хочу использовать RadioGroup. Я мог бы использовать LinearLayout и размещать изображения в вертикальной ориентации, а рядом с ними располагать радиокнопки в группе. Каждое проверенное состояние RadioButton по умолчанию является ложным, и когда я его проверяю, оно становится истинным. Проблема в том, что я могу проверить все радиокнопки. Что я хочу, так это то, что когда я выбираю один 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);
      }
    }

person Ιγνάτιος Γληνός    schedule 19.02.2015    source источник
comment
Но что не сработало, так это проблема с ручным массивом и отсутствием фрагмента кода, поэтому трудно помочь.   -  person Shai Levy    schedule 19.02.2015
comment
В этом случае onClick просто некорректен, вам нужно вызвать setOnCheckedChangeListener(), щелчок происходит до того, как статус проверки изменился. Также: никогда не используйте прослушиватели в атрибутах xml.. это проблематично.   -  person Shai Levy    schedule 19.02.2015
comment
огромное спасибо, все работает! знак равно   -  person Ιγνάτιος Γληνός    schedule 19.02.2015


Ответы (1)


  • Не совсем понятно, что не работает, пожалуйста, добавьте подробности
  • При этом я предлагаю вам изменить технику и в любом случае использовать RadioGroup, просто расширить его и изменить до того, что вам нужно, или взять его исходный код из AOSP, и вместо того, чтобы расширять LinearLayout, вы можете расширить что-то еще, с чем вы бы предпочли работать
person Shai Levy    schedule 19.02.2015