【问题标题】:Two radio buttons getting selected in Radio Group在 Radio Group 中选择了两个单选按钮
【发布时间】:2014-08-01 07:32:10
【问题描述】:

在单选组中选择了两个按钮。
我不知道我哪里错了。请帮帮我。

final RadioGroup rg=new RadioGroup(Survay_MainActivity.this);
rg.clearCheck();
rg.setId(Integer.valueOf(entry1.getKey()));  
Log.v("rg getid", "rg"+rg.getId());
for(int i =0;i<values.size();i++){
    // Create Button
    final RadioButton btn = new RadioButton(Survay_MainActivity.this);
    btn.setId(i);
    btn.setTextColor(Color.parseColor("#000000"));
    btn.setBackgroundColor(Color.TRANSPARENT);
    btn.setGravity(Gravity.LEFT);
    btn.setText(values.get(i));

    rg.addView(btn);
    btn.setLayoutParams(params);
    btn.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            JSONObject quesAns = new JSONObject();
            String ans=btn.getText().toString().trim();
            try {
                quesAns.put(String.valueOf(rg.getId()), ans);
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            jsonarray.put(quesAns);    
            Log.v("jsonarray", "jsonarray"+jsonarray);
        }
    });
}     
views.addView(rg);     

1) 我在循环之外创建 RadioGroup。

2) 在for循环中向RadioGroup添加单选按钮

3) 当循环结束时,RadioGroup 被添加到 linerlayout。

【问题讨论】:

  • 您每次都通过循环创建一个新按钮 - 因为您已将其声明为 final,您可以在 onClick 处理程序中访问它 - 但这很糟糕,因为您每次都在重新创建按钮 - btn 指的是最后一个创建的按钮,而不是您通过循环时创建的按钮。
  • entry1.getKey()的值是多少?
  • 正如 simo 所提到的,您正在创建一个最终按钮,并以错误的方式访问它。 final 实际上很有用,但不是在这种情况下 - 您将相同的按钮传递给 onClick 方法,所以最好使用那个按钮。接下来,您应该在 RadioGroup 上使用 onCheckChangeListener,而不是在 RadioButton 上使用 onclick。我不知道为什么有两个选中的按钮,但先尝试修复这两个问题。哦,这两组似乎都有相同的 ID。

标签: android android-radiogroup


【解决方案1】:

您只需要为不同的单选按钮更改不同的 ID。 gen 文件中可能存在一些 id 冲突。 单选按钮1:android:id="@+id/one 单选按钮2:android:id="@+id/two" 单选按钮 3:android:id="@+id/three"

希望这会有所帮助。

【讨论】:

  • 随机设备出现此问题。一旦我给 RadioButtons 提供了 ID,它就起作用了
【解决方案2】:

您必须做出这些更改。

1.将您的OnClickListener 更改为OnCheckChangeListener

2.在添加所有radioButtons 之后和在LinearLayout 中添加之前,清除检查您的radioGroup

【讨论】:

    【解决方案3】:

    你的问题来自于你手动为你的物品设置一个ID

    rg.setId(Integer.valueOf(entry1.getKey()));  
    btn.setId(i);
    

    Android 使用不同的自动生成的 id。手动设置 id 可能会发生您为单选组和单选按钮提供相同的 ID。 我使用了您的代码并将组设置为 ID 3 和从 0 到 4 的无线电。
    不用说,在我单击 ID 为 3 的按钮后,它始终保持打开状态,因为该组具有相同的 ID。 因此,请尝试删除 id 设置部分,或者,如果您坚持要确保您始终拥有不同的 id。

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题。原因是 RadioGroup 的 id 与 RadioButtons 之一相同

      【讨论】:

        【解决方案5】:

        问题是这一行。您没有发送此代码所属的位置。当您离开此范围并返回时,您将创建新的RadioGroup。您应该有一个且只有一个 RadioGroup,因此 RadioButtons 具有相同的 RadioGroup,默认情况下将选择其中一个。为此,您可以在 XML 中定义 RadioGroup 并使用它为它定义变量 RadioGroup rg = (RadioGroup) findViewById(R.id.YOURNAME); 或者您可以将您的 RadioGroup 定义为实例变量(全局)。

        final RadioGroup rg=new RadioGroup(Survay_MainActivity.this);
        

        【讨论】:

          猜你喜欢
          • 2020-12-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-10
          • 2021-06-16
          • 2011-07-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多