14

我有一个按钮的 onClickListener 需要检测用户单击按钮时选择了哪个单选按钮。目前,您在 onClickListener 中看到的 Log.v 没有返回无用的信息:

这是点击提交三次,每次选择不同的收音机:

04-27 19:24:42.417: V/提交(1564): 1094168584

04-27 19:24:45.048: V/提交(1564): 1094167752

04-27 19:24:47.348: V/提交(1564): 1094211304

所以,我需要知道实际选择了哪个单选按钮 - 有没有办法获取单选按钮的对象?我希望能够从 XML 中获取它的 id# 以及它的当前文本。

以下是相关代码:

public void buildQuestions(JSONObject question) throws JSONException {

    radioGroup = (RadioGroup) questionBox.findViewById(R.id.responseRadioGroup);

    Button chartsButton = (Button) questionBox.findViewById(R.id.chartsButton);
    chartsButton.setTag(question);
    Button submitButton = (Button) questionBox.findViewById(R.id.submitButton);

    chartsButton.setOnClickListener(chartsListener);
    submitButton.setOnClickListener(submitListener);

    TagObj tagObj = new TagObj(question, radioGroup);
    submitButton.setTag(tagObj);

}

public OnClickListener submitListener = new OnClickListener() {
    public void onClick(View v) {
        userFunctions = new UserFunctions();
        if (userFunctions.isUserLoggedIn(activity)) {
            TagObj tagObject = (TagObj) v.getTag();
            RadioGroup radioGroup = tagObject.getRadioGroup();
            JSONObject question = tagObject.getQuestion();

            Log.v("submit", Integer.toString(radioGroup.getCheckedRadioButtonId()));
            SubmitTask submitTask = new SubmitTask((Polling) activity, question);
            submitTask.execute();

        }
    }   
};
4

4 回答 4

28

getCheckedRadioButtonId()返回在id中检查的RadioButton(或者-1如果没有RadioButtons检查)Radiogroup。如果您在布局中为 id 设置不同的 id,RadioButons那么您将尝试将这些 id 与方法的返回相匹配,以查看检查了哪一个:

//field in the class
private static final int RB1_ID = 1000;//first radio button id
private static final int RB2_ID = 1001;//second radio button id
private static final int RB3_ID = 1002;//third radio button id

//create the RadioButton
RadioButton rb1 = new RadioButton(this);
//set an id
rb1.setId(RB1_ID);


    int btn = radioGroup.getCheckedRadioButtonId();
    switch (btn) {
    case RB1_ID:
        // the first RadioButton is checked.
    break;
        //other checks for the other RadioButtons ids from the RadioGroup
    case -1:
        // no RadioButton is checked inthe Radiogroup
    break;
    }
于 2012-04-27T19:37:56.083 回答
3

存储检查的 ID,然后使用函数 radioButton.getID() 使用 switch 语句或 if-else 链将其与每个按钮进行比较

于 2012-04-27T19:38:25.943 回答
1

我在RadioGroupxml中设置初始选中的单选按钮

 <RadioGroup
          android:id="@+id/rgCustomized"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_marginStart="32dp"
          android:layout_marginTop="8dp"
          android:checkedButton="@+id/rbNotCustomized"
          android:orientation="horizontal">

          <RadioButton
              android:id="@+id/rbCustomized"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_marginEnd="50dp"
              android:text="@string/yes" />

          <RadioButton
              android:id="@+id/rbNotCustomized"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="@string/no" />

 </RadioGroup>

我确定像这样选择了哪个radioButton

rgCustomized.checkedRadioButtonId==rbCustomized.id
于 2019-03-06T18:49:57.793 回答
0

radioGroup.getCheckedRadioButtonId()我认为如果要将其存储到数据库中或使用它,则依赖于返回的内容不是一个好习惯。

因为:

  • getCheckedRadioButtonId()每个值都会不断变化RadioButton,如果有两个相似的值(同一层次结构中的两个视图),Android 将选择第一个。除非您使用方法提供了唯一的 IdsgenerateViewId()并将其设置为使用setId().
  • getCheckedRadioButtonId()将返回未知值。

所以

打开radioGroup.getCheckedRadioButtonId()并为每个选择实现自定义值,然后使用该自定义值,而不是 View Id。

使用来自选定单选按钮的值的示例:

int selected = -1;
switch (radioGroup.getCheckedRadioButtonId()) {
    case R.id.one_radioButton:
        selected = 0;
        break;
    case R.id.two_radioButton:
        selected = 1;
        break;
    case R.id.three_radioButton:
        selected = 2;
        break;
}
    // return a custom value you specific
    Log.d(TAG, "selectedBox: " + selectedBox);   

    // return a random unknown number value
    Log.d(TAG, "radioGroup.getCheckedRadioButtonId(): " + radioGroup.getCheckedRadioButtonId());

将选定的 RadioButton 填充到 UI 的示例:

    switch (selected) {
        case 0:
            oneRadioButton.setChecked(true);
            break;
        case 1:
            twoRadioButton.setChecked(true);
            break;
        case 2:
            threeRadioButton.setChecked(true);
            break;
    }
于 2018-10-30T04:38:27.117 回答