私は、プログラムでRadioGroupsとネストされたRadioButtonを操作しています。いくつかの動作のためのラジオボタンの作成と削除。しかし、問題が明らかになったとき、私はonCheckedChanged
イベントを発射する。 RadioGroup内のすべてのラジオボタンを削除した後も、RGを削除した後でも、システムはラジオボタンのカウンタをリセットしません。 この衝突は、特定のradioButtonをチェックするなどのイベントを捕捉しようとしているときに発生しますが、ラジオボタンのインデックス(checkId)が実際の状態と等しくないため、ヌルポイント例外が発生します。 自分でradioButtonを数え、onCheckedChangedイベントでcheckIdを修正する必要がありますか? 松葉杖のように見えます。RadioGroup checkedId(またはgetCheckedRadioButtonId())が正しく機能しない
ここではいくつかのコード例:ここ
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
ありがとうございました。 –