单选框组的onclick事件没有触发,如何知道哪个被选中了?

20

我正在使用单选按钮组,但是 RadioGrouponClick 事件没有触发并且 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个回答

40

这个问题可以通过以下方式解决

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;
                }
            }
        });

或者

您可以使用自定义 ID 而不是默认的 ID。

  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;
                    }
                }
            });

起初我有些困惑:这个答案中的代码需要放在OnCreateOnCreateView中(如果我错了,请纠正我),我最初尝试将其放在我的Activity类中。 - James Vickery

7

实际上,我认为您不需要添加 android:clickable="true" 或点击监听器。你可以声明 RadioGroup.OnCheckedChangeListener 来监听选择的更改。请参见此线程,了解如何使用它的示例。


在哪里需要添加 android:clickable="true"? - Samet ÖZTOPRAK
@Sametöztoprak,就像我所写的那样,您不需要这个属性。 - Boris Strandjev

2

编辑:我在你的代码中进行了一些更改,现在它可以正常工作了。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();

    }

只需在单选按钮右侧的任何位置单击,即可看到Toast。虽然对于一般用途来说,OnCheckedChangeListener更有用。希望这可以帮助您。


2
你先检查了吗?先检查再回答,它不起作用。 单选按钮的事件调用能正常工作,但是单选组的事件调用不起作用。 - Trikaldarshiii
我先更改了你的代码,然后使其正常工作。应该正确地编写第一行,对此我很抱歉。你尝试过我答案中给出的代码吗? - Akhil

2
另一种方法是将您的方法分配给每个RadioButtononClick属性。然后检查视图ID。例如,
public void onRGClick(View v) {
    int id = view.getId();
    if (id == R.id.radioButtonId) {
        //Do something
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接