【问题标题】:RadioGroup Check(id) not triggering setOnCheckedChangeListener in androidRadioGroup Check(id)没有在android中触发setOnCheckedChangeListener
【发布时间】:2016-10-06 07:32:31
【问题描述】:

我有一个单选组并动态添加单选按钮。我正在使用 radiogroup.check(id) 来选择 Radiogroup 中的单选按钮。

v = new RadioGroup(ctx);
int count = 0;
for (String Str : valueStr.get(Position)) {
    RadioButton rb = new RadioButton(ctx);
    rb.setId(count);
    rb.setTag(valueStrID.get(position).get(count));
    rb.setText(Str);
    if (formFieldObject.getFD_ValueField().equals(String.valueOf(Str))) {
        rbposition = count;
   }
   rb.setTextSize(fontSize);
   ((RadioGroup) v).addView(rb);
   count++;
}

并调用此方法进行选择

((RadioGroup) v).check(rbposition);

但这不会触发 Checkedchangelistener。代码有什么问题?

【问题讨论】:

  • 告诉我们你在哪里设置监听器
  • 我在检查方法之前尝试过监听器,但没有运气。
  • 您是否尝试直接设置为单选按钮? RadioButton b = (RadioButton) findViewById(R.id.yourradiobutton); b.setChecked(true);
  • 如果我正在使用 setChecked() 它正在工作。但通过 check() 不是。
  • @Saret 我的错。我觉得你来的时候说的是对的。我们必须在 check() 方法之前设置监听器。如果我最后给它,那么它就没有在听checkedchange()。现在它正在工作。

标签: android android-radiogroup


【解决方案1】:

致电rb.setChecked(true) 进行检查。

v = new RadioGroup(ctx);
int count = 0;
for (String Str : valueStr.get(Position)) {
RadioButton rb = new RadioButton(ctx);
rb.setId(count);
rb.setTag(valueStrID.get(position).get(count));
rb.setText(Str);
rb.setTextSize(fontSize);
((RadioGroup) v).addView(rb);
if (formFieldObject.getFD_ValueField().equals(String.valueOf(Str))) {
    rbposition = count;
    rb.setChecked(true);
}


count++;
}

【讨论】:

  • 以前我只用 setChecked 方法试过。但是当我选择下一个单选按钮时它给了我问题。它丢弃了相互选择属性。即)它显示就像选择了两个单选按钮。
【解决方案2】:

我的代码正在运行,请检查。我认为您在将 RadioButton 添加到 RadioGroup 之前调用此方法,那么它应该不起作用

((RadioGroup) v).check(rbposition);

请检查我的代码是否完美运行。

public class ThirdActivity extends AppCompatActivity {

        RadioGroup radioGroup;
        ArrayList<String>valueStr=new ArrayList<>();
    LinearLayout ll;
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.third_activity);
    ll= (LinearLayout) findViewById(R.id.linearLayout);

            valueStr.add("ONE");
            valueStr.add("TWO");
            valueStr.add("THREE");



            radioGroup=new RadioGroup(ThirdActivity.this);
            radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {


                   switch (checkedId){
                       case 0:
                           Toast.makeText(ThirdActivity.this,"RadioButton ONE Selected",Toast.LENGTH_LONG).show();
                           break;
                       case 1:
                           Toast.makeText(ThirdActivity.this,"RadioButton TWO Selected",Toast.LENGTH_LONG).show();
                           break;
                       case 2:
                           Toast.makeText(ThirdActivity.this,"RadioButton THREE Selected",Toast.LENGTH_LONG).show();
                           break;
                   }
                }
            });

            int count = 0;
            for (int i=0;i<valueStr.size();i++) {
                RadioButton rb = new RadioButton(ThirdActivity.this);
                rb.setId(count);
                rb.setTag(valueStr.get(i));
                rb.setText(valueStr.get(i));

                rb.setTextSize(16);

                ((RadioGroup) radioGroup).addView(rb);
                if(count==1){
                    radioGroup.check(count);
                }

                count++;
            }
            ll.addView(radioGroup);
        }
    }

【讨论】:

  • 其实一开始我只有这种方式。但是后来改了我们要在check()方法之前注册监听器。
【解决方案3】:
v = new RadioGroup(ctx);
int count = 0;
for (String Str : valueStr.get(Position)) {
    RadioButton rb = new RadioButton(ctx);
    rb.setId(count);
    rb.setTag(valueStrID.get(position).get(count));
    rb.setText(Str);
    rb.setTextSize(fontSize);
    ((RadioGroup) v).addView(rb);
    if (formFieldObject.getFD_ValueField().equals(String.valueOf(Str))) {
        rbposition = count;
    }
    count++;
}

((RadioGroup) v).setOnCheckedChangeListener(new android.widget.RadioGroup.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup rg, int arg1) {
        // TODO Auto-generated method stub                                
    }
});

((RadioGroup) v).check(rbposition);

我在 check() 方法之前给了监听器,它现在正在工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多