【问题标题】:How to set enabled all radio groups from an Array List in Android?如何从 Android 的数组列表中设置启用的所有无线电组?
【发布时间】:2015-11-11 21:40:19
【问题描述】:

我以编程方式创建了几个单选组,每个组有 4 个单选按钮。我在我创建的完成按钮上设置了 OnClickListener。我希望当有人单击该按钮时,启用名为 answerGroupListArrayList 中的所有无线电组。我怎样才能做到这一点? 这是我的代码:

    List<RadioGroup> answerGroupList = new ArrayList<>();
    List<RadioButton> answerList = new ArrayList<>();

    int i = 0;
    for (Question qn : questions) {
        RadioGroup answerGroup = new RadioGroup(this);
        answerGroupList.add(new RadioGroup(this));
        answerGroup.setId(i);
        int j = 0;
        for (Answer an : answers) {
            if (qn.getID() == an.getQuestion_id_answer()) {
                RadioButton answer = new RadioButton(this);
                answerList.add(new RadioButton(this));
                answer.setId(j);
                answer.setText(an.getAnswer());
                answerGroup.addView(answer);
                j++;
            }
        }
        linearLayout.addView(answerGroup);
        i++;
    }

   finishButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            for (int i = 0; i < numberOfQuestions; i++) {
                for (int j = 0; j < numberOfAnswers; j++) {
                    answerGroupList.get(j).setEnabled(false); // doesn't work
                }
            }
        }
    });

谢谢!

【问题讨论】:

  • 编辑:或者如何从名为answerList ArrayList设置所有单选按钮启用?
  • 只需编辑您的帖子,不要在其后直接添加评论。另外,堆栈跟踪是什么?不幸的是,“不起作用”信息不足
  • 抱歉,帖子发送后我无法编辑。这意味着当我按下按钮时什么都没有发生。

标签: java android loops onclicklistener radio-group


【解决方案1】:

在整个radioGroup 上使用setEnabled(false) 是不够的,您必须遍历radioGroup 中的每个项目并将每个子项设置为false

集成到您的代码中将类似于:

for (int i = 0; i < numberOfQuestions; i++) 
{
    for (int j = 0; j < numberOfAnswers; j++) 
    {
        for (int k = 0; k < answerGroupList.get(j).getChildCount(); k++) 
        {
            ((RadioButton) answerGroupList.get(j).getChildAt(k)).setEnabled(false);
        }
    }
}

【讨论】:

  • 谢谢。如果我进行此更改,它会显示variable 'answerGroupList' is accessed from within inner class needs to be declared final 。如果我将其声明为最终版本,则会收到此错误:cannot resolve method getChildAt(k).
  • 通常这意味着如果两个方法看到相同的局部变量,Java 希望您不要更改它。但是,您可能不想要这个。尝试将其设为全局变量。
  • 我只是尝试像这样设置变量answerGroupList global,public ArrayList&lt;RadioGroup&gt; answerGroupList; 但它不起作用。同样的问题。我错了吗?
  • 我可以检查您是否在类级别而不是在方法中声明它?这也适用于尝试将其更改为 final
  • 我还有一个变化。我将变量声明为全局变量,如下所示:List&lt;RadioGroup&gt; answerGroupList = new ArrayList&lt;&gt;();。当我打开应用程序时,什么也没有发生。单选按钮保持启用状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 2014-04-23
  • 2017-03-06
  • 2013-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多