2013-04-04 8 views
4

Приложение представляет собой приложение для секвенсера с шестью группами радиостанций с 8 кнопками в каждой группе. Он отлично работает, за исключением случаев, когда у группы есть выбранная кнопка. Я не могу отключить ее, если не использую кнопку очистки, которую я создал, чтобы очистить все радиогруппы. То, что я хотел бы добавить, - это код, который говорит, что когда выбран выбранный переключатель, он просто отключается, как переключатель. Я попытался использовать переключатели, но затем возникли другие проблемы с этим методом. Ниже предпринята попытка на него, но это путь от марки Im угадываниеОтмена радиокнопки

final RadioGroup radioGroup1 = (RadioGroup)findViewById(R.id.RadioGroup1); 
RadioButton lC1 = (RadioButton)findViewById(R.id.RadioButtonlowC1); 

Button D1 = (Button)findViewById(R.id.RadioButtonD1); 
     D1.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       PdBase.sendFloat("D1", 74); 
       int selectedTypeId = radioGroup1.getCheckedRadioButtonId(); 
       RadioButton D1 = (RadioButton) findViewById(selectedTypeId); 
       if(radioGroup1 != null) // This will be null if none of the radio buttons are selected 
         radioGroup1.clearCheck(); 
       PdBase.sendFloat("D1", 0); 
      } 
     }); 

ответ

1

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

+0

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

+0

На самом деле это не будет работать для меня, поскольку мне нужно иметь возможность переключаться внутри радиогруппы на разные кнопки –

+0

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

1

Вот пример того, как создать радиогруппу, радиообъектив и как использовать в Java-коде. Надеюсь, что это даст вам полную картину

XML файл:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 


    <RadioGroup 
     android:id="@+id/maptype" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/line1" 
     android:orientation="horizontal" > 

     <RadioButton 
      android:id="@+id/map" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:checked="true" 
      android:drawableRight="@drawable/ic_launcher"/> 

     <RadioButton 
      android:id="@+id/satellite" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:drawableRight="@drawable/ic_launcher"/> 
    </RadioGroup> 

</LinearLayout> 

В Java кодекса

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    RadioGroup rgrpMapType = (RadioGroup) findViewById(R.id.maptype); 
    int selectedTypeId = rgrpMapType.getCheckedRadioButtonId(); 
    RadioButton rbMapType = (RadioButton) findViewById(selectedTypeId); 
    if(rbMapType != null) // This will be null if none of the radio buttons are selected 
      rgrpMapType.clearCheck(); 
} 
+1

После строки 3 в приведенном выше java-коде напишите этот код. rbMapType будет null, только если выбран какой-либо переключатель. Надеюсь, что код станет понятным. if (rbMapType! = null) rgrpMapType.clearCheck(); –

+0

Спасибо за ответ, но он не позволит мне выбирать радиокнопки, когда я реализую код, который вы мне дали, это то, как он выглядит после добавления кода. –

+1

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

20

Пожалуйста, смотрите мой ответ на ваш другой basically identical question, который я скопированный ниже ... :)

У меня недавно была такая же потребность - иметь радиоприемник группы, где выбранный элемент можно отменить, снова нажав на него. Я обнаружил, что я не мог добиться этого с помощью слушателей, но я был в состоянии сделать это с помощью пользовательского RadioButton, как так ...

public class ToggleableRadioButton extends RadioButton { 
    // Implement necessary constructors 

    @Override 
    public void toggle() { 
     if(isChecked()) { 
      if(getParent() instanceof RadioGroup) { 
       ((RadioGroup)getParent()).clearCheck(); 
      } 
     } else { 
      setChecked(true); 
     } 
    } 
} 

Обратите внимание, что кнопка переключается по-разному в зависимости от тока состояние - то есть, вызывая setChecked(true) на кнопке против вызова clearCheck() в группе. Если в обоих случаях используется setChecked(), кнопка, которая была просто отменена, не может быть немедленно повторно выбрана - логика в RadioGroup предотвращает ее.

Чтобы использовать эту кнопку, просто замените теги <RadioButton> на <your.package.ToggleableRadioButton> в вашем формате XML.

+0

Отлично ответ. Спасибо, человек! –

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