Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 放射组checkedId(或getCheckedRadioButtonId())工作不正确_Java_Android_Radio Button_Radio Group - Fatal编程技术网

Java 放射组checkedId(或getCheckedRadioButtonId())工作不正确

Java 放射组checkedId(或getCheckedRadioButtonId())工作不正确,java,android,radio-button,radio-group,Java,Android,Radio Button,Radio Group,我正在通过编程方式使用放射组和嵌套单选按钮。创建和删除某些行为的单选按钮。但当我触发onCheckedChanged事件时,问题就暴露出来了。系统不会重置单选按钮计数器,即使在我删除radioGroup中的所有单选按钮之后,甚至在删除RG之后。 这个冲突发生在我试图捕捉事件时,比如检查特定的单选按钮,但是我得到了null点异常,因为单选按钮的索引(checkId)不等于真实状态。 我是否应该自己计算单选按钮并在onCheckedChanged事件中更正checkId? 看起来像拐杖 下面是一些代

我正在通过编程方式使用放射组和嵌套单选按钮。创建和删除某些行为的单选按钮。但当我触发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();