【问题标题】:setChecked and setSelected not working android radio buttonsetChecked 和 setSelected 不起作用的 android 单选按钮
【发布时间】:2018-08-31 22:30:04
【问题描述】:

当我的变量 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);
}

【问题讨论】:

    标签: android


    【解决方案1】:

    我已经检查了创建此 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);
        }
    }
    

    希望对你有帮助。

    【讨论】:

    • 谢谢,但这并不能解决我的问题。我对其进行了测试,但仍然没有选中单选按钮。另外,我需要“radiob.setId(model.getId());”行原因我在我的数据库上进行了插入。不过谢谢!
    • 对不起 Gabriela,但我不知道你的代码有什么问题,可能是 xml 文件有问题?
    • 别担心。我在 xml 文件中的广播组如下所示:
    • @gabriela 也许这个解决方案可以帮助你:stackoverflow.com/questions/12287402/…
    【解决方案2】:

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

    如果是这样,只需将您的 if 情况更改为以下内容:

    if (idAnswerP.equals(model.getId())) {
                radiob.setId(model.getId());
                radiob.setText(model.getQuestion())
                ....
    

    【讨论】:

    • 不是字符串,是整数。
    【解决方案3】:

    您需要为单选按钮设置不同的视图 ID。

    【讨论】:

      猜你喜欢
      • 2016-11-10
      • 2012-04-21
      • 2018-05-04
      • 2019-10-09
      • 2020-04-10
      • 1970-01-01
      • 2014-11-13
      • 1970-01-01
      • 2017-02-02
      相关资源
      最近更新 更多