android.widget.RadioGroup 不能转换为 android.widget.RadioButton
Posted
技术标签:
【中文标题】android.widget.RadioGroup 不能转换为 android.widget.RadioButton【英文标题】:android.widget.RadioGroup cannot be cast to android.widget.RadioButton 【发布时间】:2016-02-10 04:26:36 【问题描述】:我实用地创建了 5 个单选组,每个组有 4 个单选按钮。当我尝试使用checkedRadioButton
时,模拟器会崩溃?错误是:android.widget.RadioGroup cannot be cast to android.widget.RadioButton
。我哪里错了?
这是我的代码:
radioGroup = new RadioGroup[5];
answer = new RadioButton[4];
int i = 0;
for (Question qn : questions)
radioGroup[i] = new RadioGroup(this);
radioGroup[i].setId(i);
int j = 0;
for (Answer an : answers)
if (qn.getID() == an.getQuestion_id_answer())
answer[j] = new RadioButton(this);
answer[j].setText(an.getAnswer());
answer[j].setId(j);
radioGroup[i].addView(answer[j]);
answer[j].setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
int checkedRadioButtonId = v.getId();
Toast.makeText(getApplicationContext(), "Checkbox" + checkedRadioButtonId + " checked", Toast.LENGTH_SHORT).show();
RadioButton checkedRadioButton = (RadioButton) findViewById(checkedRadioButtonId);
);
j++;
linearLayout.addView(radioGroup[i]);
i++;
【问题讨论】:
从错误中可以明显看出您正在单选按钮中投射单选组,反之亦然, answer[j] = new RadioButton(this);答案[j].setText(an.getAnswer());答案[j].setId(j); radioGroup[i].addView(answer[j]); 好的,但是我需要改变什么来解决这个问题? 【参考方案1】:您正在以编程方式为RadioGroup
和RadioButton
视图设置ID
radioGroup[i].setId(i);
分别
answer[j].setId(j);
由于 i 的某些值也可以是 j 的值(例如 i=j=0),因此您有时会分配相同的 id 两次。
findViewById()
方法将返回任何具有匹配 id 的 View
,返回的 View
仅在转换为适当的类之后。
现在不小心排队了
RadioButton checkedRadioButton = (RadioButton) findViewById(checkedRadioButtonId);
首先找到请求 id 为“checkedRadioButtonId
”的RadioGroup
。这会导致崩溃。
解决问题,使用tag属性,例如
radioGroup[i].setTag("rg" + i);
和 answer[j].setTag("rb" + j);
然后你可以通过写得到带有标签“xyz”的个人View
RadioButton checkedRadioButton = (RadioButton) findViewWithTag("xyz");
【讨论】:
是的,你完全正确。但是当我尝试设置无线电组的 IDradioGroup[i].setId("rg" + i);
它说:setId(int) in View cannot be applied to java.lang.String
好吧,我从来没有尝试过以编程方式进行,我只是使用 xml 并在那里我可以编写 android:id="some_name"。当然,这里的“id”必须是“R.id.whatever”,它是一个 int 值:(。我会编辑我的答案 - 谢谢
我不能使用 XML,因为我需要生成 80 个广播组,我不想手动编写它们。
@Alex M. - 是的 - 我不想让你这样做;)请查看我编辑的答案。
如果我用"rb"+j
设置标签,那么我将如何通过findViewWithTag("rb" +j)
得到它,onCheckedChanged
中没有j
以上是关于android.widget.RadioGroup 不能转换为 android.widget.RadioButton的主要内容,如果未能解决你的问题,请参考以下文章