Java 放射组checkedId(或getCheckedRadioButtonId())工作不正确
我正在通过编程方式使用放射组和嵌套单选按钮。创建和删除某些行为的单选按钮。但当我触发onCheckedChanged事件时,问题就暴露出来了。系统不会重置单选按钮计数器,即使在我删除radioGroup中的所有单选按钮之后,甚至在删除RG之后。 这个冲突发生在我试图捕捉事件时,比如检查特定的单选按钮,但是我得到了null点异常,因为单选按钮的索引(checkId)不等于真实状态。 我是否应该自己计算单选按钮并在onCheckedChanged事件中更正checkId? 看起来像拐杖 下面是一些代码示例:Java 放射组checkedId(或getCheckedRadioButtonId())工作不正确,java,android,radio-button,radio-group,Java,Android,Radio Button,Radio Group,我正在通过编程方式使用放射组和嵌套单选按钮。创建和删除某些行为的单选按钮。但当我触发onCheckedChanged事件时,问题就暴露出来了。系统不会重置单选按钮计数器,即使在我删除radioGroup中的所有单选按钮之后,甚至在删除RG之后。 这个冲突发生在我试图捕捉事件时,比如检查特定的单选按钮,但是我得到了null点异常,因为单选按钮的索引(checkId)不等于真实状态。 我是否应该自己计算单选按钮并在onCheckedChanged事件中更正checkId? 看起来像拐杖 下面是一些代
private static final String TAG = MainActivity.class.getSimpleName();
private RadioGroup rg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout ll = findViewById(R.id.someLL);
rg = new RadioGroup(this);
rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
Log.d(TAG, "checked id: " + checkedId);
Log.d(TAG, "print text: " + ((RadioButton) group.getChildAt(checkedId)).getText() );
}
});
ll.addView(rg);
rebuildRG(Arrays.asList("one", "two", "three", "four", "five"));
rg.removeAllViews();
rebuildRG(Arrays.asList("111", "222", "333", "444"));
}
private void rebuildRG(List<String> data){
for(String i: data){
RadioButton rb = new RadioButton(this);
rb.setText(i);
rg.addView(rb);
}
}
您正试图使用
checkedd
作为位置。请参见下面的第行
((RadioButton) group.getChildAt(checkedId))
它在回调中清楚地提到它的ID
不是位置
。看
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
//checkedId :- xml id of currently checked radio Button
}
和
getChildAt(整数索引)
:-getChildAt()将索引作为参数而不是ID
解决方案是
((RadioButton) group.findViewById(checkeId)).getText();
或者干脆
((RadioButton)findViewById(checkeId)).getText();
谢谢,工作解决方案。
((RadioButton)findViewById(checkeId)).getText();