Событие onclick радиогруппы не запускается, как узнать, какой выбран? - PullRequest
18 голосов
/ 17 марта 2012

Я использую радиогруппу, но событие RadioGroup onClick не запускается, и метод getCheckedRadiobuttonID() возвращает null.Вот элемент моего макета :

   <RadioGroup
            android:id="@+id/RG1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:onClick="onRGClick" >

Метод

public void onRGClick(View v) {
    Toast.makeText(this, "Test ", 1000).show();
}

Ответы [ 4 ]

38 голосов
/ 07 июля 2013

Эта проблема может быть решена с помощью следующих

RadioGroup rg = (RadioGroup) findViewById(R.id.radioGroup1);
        rg.setOnCheckedChangeListener(new OnCheckedChangeListener()
        {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId)
            {
                switch(checkedId)
                {
                case R.id.radio0:
                    // TODO Something
                    break;
                case R.id.radio1:
                    // TODO Something
                    break;
                case R.id.radio2:
                    // TODO Something
                    break;
                }
            }
        });

В качестве альтернативы

Вы можете использовать собственные идентификаторы вместо одного по умолчанию

  RadioGroup rg = (RadioGroup) findViewById(R.id.radioGroup1);
            rg.setOnCheckedChangeListener(new OnCheckedChangeListener()
            {
                @Override
                public void onCheckedChanged(RadioGroup group, int checkedId)
                {
                    switch(checkedId)
                    {
                    case R.id.male:
                        // TODO Something
                        break;
                    case R.id.female:
                        // TODO Something
                        break;
                    case R.id.other:
                        // TODO Something
                        break;
                    }
                }
            });
6 голосов
/ 17 марта 2012

На самом деле я думаю, что вам не нужно добавлять android:clickable="true" или нажимать на слушателя. Вы можете объявить RadioGroup.OnCheckedChangeListener, который будет прослушивать изменения выбора. Пожалуйста, посмотрите в этой теме , например, как вы можете это использовать.

2 голосов
/ 27 сентября 2012

Другой способ - назначить свой метод для свойства onClick каждого RadioButton.Затем проверьте идентификатор представления.Например,

public void onRGClick(View v) {
    int id = view.getId();
    if (id == R.id.radioButtonId) {
        //Do something
    }
}
2 голосов
/ 17 марта 2012

РЕДАКТИРОВАТЬ: я сделал некоторые изменения в вашем коде, и это работает для меня. OnClick работает для всех просмотров. Здесь в вашем коде ширина Rgroup равна wrap_content, поэтому, если вы поместили RadioButtons внутри RG (которая будет полностью перекрывать RG), ваши щелчки будут использоваться RadioButtons (а не Rgroup). Я сделал ширину Rgroup равным fill_parent, и щелчок выполнялся. Вот мой пример, чтобы вы могли его опробовать.

    <RadioGroup  android:onClick="onRGClick" ndroid:text="RadioButton" 
    android:id="@+id/radioGroup1" android:layout_width="fill_parent" android:layout_height="wrap_content">
    <RadioButton android:text="RadioButton" android:id="@+id/radioButton2" android:layout_width="wrap_content" android:layout_height="wrap_content"></RadioButton>
</RadioGroup>

А вот и активность:

public class Hello extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

     }
    public void onRGClick(View v){
        Toast.makeText(this, "Test ", Toast.LENGTH_LONG).show();

    }

Просто нажмите в любом месте справа от RadioButton, и вы увидите тост. Хотя для общих целей OnCheckedChangeListener более полезен. Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...