【发布时间】:2018-06-05 03:26:29
【问题描述】:
我正在以编程方式使用 RadioGroups 和嵌套的 RadioButtons。为某些行为创建和删除单选按钮。但是当我触发onCheckedChanged 事件时,问题就暴露了。系统不会重置单选按钮计数器,即使在我删除 radioGroup 中的所有单选按钮之后,甚至在删除 RG 之后也是如此。
当我试图捕捉事件(例如检查特定的单选按钮)时,会发生这种冲突,但我得到空点异常,因为单选按钮的索引 (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);
}
}
这里是Logcat:
D/MainActivity: checked id: 9
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.flexdecision.ak_lex.radiogroup, PID: 11604
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.widget.RadioButton.getText()' on a null object reference
【问题讨论】:
标签: java android radio-button radio-group