2017-12-22 7 views
-2

私は、プログラムで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 

答えて

0

あなたは下の行に位置.SeeとしてcheckedId使用しようとしています。

((RadioButton) group.getChildAt(checkedId)) 

そのは明らかにコールバックそのIDないpositionに言及しています。見る。

@Override 
    public void onCheckedChanged(RadioGroup group, int checkedId) { 
     //checkedId :- xml id of currently checked radio Button 
    } 

そして

getChildAt(int型のインデックス) : - getChildAt()の引数ではないID

ソリューションは

((RadioButton) group.findViewById(checkeId)).getText(); 
あるとして、インデックスを取ります0

または単に

((RadioButton)findViewById(checkeId)).getText(); 
+0

ありがとうございました。 –

関連する問題