代码之家  ›  专栏  ›  技术社区  ›  waclaw

Android RadioGroup点击监听器[关闭]

  •  0
  • waclaw  · 技术社区  · 10 年前

    我在下面定义了带有单选按钮的单选组。如何正确实现onClickListener?我得到了ArrayIndexOutOfBoundsException。我不知道怎么了。

     public void createRadioButton(Integer amount, LinearLayout layout, Integer text) {
    
        AppCompatTextView txt = new AppCompatTextView(activity);
        AppCompatButton btn = new AppCompatButton(activity);
        btn.setText("Click");
        txt.setText(text);
        final AppCompatRadioButton[] rb = new AppCompatRadioButton[amount];
        final RadioGroup rg = new RadioGroup(activity);
    
        rg.setOrientation(RadioGroup.VERTICAL);
    
        for( i=0; i<amount; i++){
            rb[i]  = new AppCompatRadioButton(activity);
            rg.addView(rb[i]);
            rb[i].setId(i + 100);
            rb[i].setText("Test " + i);
        }
        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
    
                int selectedId = rg.getCheckedRadioButtonId();
                rb[i] = (AppCompatRadioButton) activity.findViewById(selectedId);
    
               Toast.makeText(activity, "VALUE" rb[i].getText(), Toast.LENGTH_SHORT).show();
            }
        });
        layout.addView(txt);
        layout.addView(rg);
        layout.addView(btn);
    }
    
    4 回复  |  直到 10 年前
        1
  •  3
  •   Ludwig S    10 年前
     for( i=0; i<amount; i++){
            rb[i]  = new AppCompatRadioButton(activity);
            rg.addView(rb[i]);
            rb[i].setId(i + 100);
            rb[i].setText("Test " + i);
    
        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
    
                int selectedId = rg.getCheckedRadioButtonId();
                rb[i] = (AppCompatRadioButton) activity.findViewById(selectedId);
    
               Toast.makeText(activity, "VALUE" rb[i].getText(), Toast.LENGTH_SHORT).show();
            }
        });
    }
    

    如果你想为循环的每个项目添加一个onclicklistener,你需要扩展for循环,这样它也会循环你的onclicklistener,就像这样。

        2
  •  2
  •   Akash kv    10 年前

    对单选组使用setOnCheckedChangeListener

    这样使用

    radiogroup_gender.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(RadioGroup group, int checkedId) {
                        switch (checkedId){
                            case R.id.radiobutton_male :
                                 break;
                            case R.id.radiobutton_female :
    
                                break;
                            default:
                                 break;
                        }
                    }
                });
    
        3
  •  1
  •   Context    10 年前

    循环后 i 值将等于 amount 你用的是同样的 在这里 rb[i] = (AppCompatRadioButton) activity.findViewById(selectedId); 列表大小等于 amount-1 这就是为什么你得到 ArrayIndexOutOfBoundsException

        4
  •  1
  •   Jejefcgb    10 年前

    您的代码中有一些错误。首先,参数文本应该是“字符串”,而不是整数。然而,代码中的主要问题是,您在代码中覆盖了最后一个单选按钮(rb[i])。你不应该这样做。 最好的方法是在循环中声明变量i,并在用户单击时创建一个新的RadioButton。

    注意:您验证的解决方案效率很低,因为每次创建按钮时都会创建一个点击监听器。或者它总是更新同一个列表,因为你只有一个按钮。

    请尝试以下代码;)

    public void createRadioButton(Integer amount, LinearLayout layout, String text) {
    
        AppCompatTextView txt = new AppCompatTextView(activity);
        AppCompatButton btn = new AppCompatButton(activity);
        btn.setText("Click");
        txt.setText(text);
        final AppCompatRadioButton[] rb = new AppCompatRadioButton[amount];
        final RadioGroup rg = new RadioGroup(activity);
    
        rg.setOrientation(RadioGroup.VERTICAL);
    
        for(int i=0; i<amount; i++){
            rb[i]  = new AppCompatRadioButton(activity);
            rg.addView(rb[i]);
            rb[i].setId(i + 100);
            rb[i].setText("Test " + i);
        }
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    
                int selectedId = rg.getCheckedRadioButtonId();
                AppCompatRadioButton button= (AppCompatRadioButton) activity.findViewById(selectedId);
    
                Toast.makeText(activity, "VALUE" +  button.getText(), Toast.LENGTH_SHORT).show();
            }
        });
        layout.addView(txt);
        layout.addView(rg);
        layout.addView(btn);
    }