setChecked和setSelected无法正常工作的Android单选按钮

时间:2018-08-31 22:30:05

标签: android

当我的变量idAnswerP等于Answers.get(i)时,我正试图从单选按钮获取所选值。当我在应用程序上调试时,显示我在idRespuestaC中收到的数字,但未显示在单选按钮中。帮助吗?

public void addRB(ArrayList<Model> answers) {
    RadioGroup ll = new RadioGroup(this);
    ll.setOrientation(LinearLayout.VERTICAL);

    for (int i = 0; i < answers.size(); i++) {
        Model model = answers.get(i);
        RadioButton radiob = new RadioButton(this);

        if (idAnswerP == model.getId()) {
            radiob.setId(model.getId());
            radiob.setText(model.getQuestion());
            radiob.setTag(model.getAnswer());
            radiob.setChecked(true);
            radiob.setSelected(true);
        } else {
            radiob.setId(model.getId());
            radiob.setText(model.getQuestion());
            radiob.setTag(model.getAnswer());
            radiob.setChecked(false);
        }

        lisRadio.add(radiob);
        ll.addView(radiob);
    }

    ((ViewGroup) findViewById(R.id.radioGroup)).addView(ll);
}

2 个答案:

答案 0 :(得分:0)

已经检查了您创建此Activity的代码,并且发现如果我使用setId(model.getId),则从不检查第一个单选按钮,则一切正常。

所以我在想,也许您有一个重复的ID,并且在单选按钮中设置ID时效果不佳。

我让您一直在测试的代码。

代码:

public class MainActivity extends AppCompatActivity {

    private final int idAnswerP = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ArrayList<Model> answer = new ArrayList<>();
        answer.add(new Model(1));
        answer.add(new Model(1));
        answer.add(new Model(1));
        answer.add(new Model(1));
        answer.add(new Model(2));
        answer.add(new Model(2));

        addRB(answer);

    }

    public void addRB(ArrayList<Model> answers) {

        RadioGroup ll = new RadioGroup(this);
        ll.setOrientation(LinearLayout.VERTICAL);

        RadioButton radiob;

        for (Model model: answers) {

            radiob = new RadioButton(this);

            if (idAnswerP == model.getId()) {
                radiob.setId(model.getId()); //Comment this line and everything works without problem
                radiob.setText(model.getQuestion());
                radiob.setTag(model.getAnswer());
                radiob.setChecked(true);
            } else {
                radiob.setId(model.getId());
                radiob.setText(model.getQuestion());
                radiob.setTag(model.getAnswer());
                radiob.setChecked(false);
            }

            ll.addView(radiob);
        }

        ((ViewGroup) findViewById(R.id.radioGroup)).addView(ll);
    }
}

希望对您有帮助。

答案 1 :(得分:0)

如果idAnswerP的类型为String,那么毫无疑问,这是行不通的。

如果是这样,只需将if大小写更改为以下内容:

if (idAnswerP.equals(model.getId())) {
            radiob.setId(model.getId());
            radiob.setText(model.getQuestion())
            ....
相关问题