2016-03-28 9 views
0

私は、最初に選択したアイテムの特定の基準値を持つチェックボックスを生成し、その値を変更する必要があるアプリをやっています。非常に複雑なものはありません。Android RadioGroup checkedIdが範囲外にある

私の問題は、レイアウトをリセットしたときに、新しいRadioButtonsを持つ新しいRadioGroupとRadioGroupの新しいOnCheckedChangeListenerを作成することです。しかし、UIをリセットした後でチェックボックスをクリックすると、リスナから来るcheckIdは、自分のRadioGroupの範囲外に大きすぎるものを出力します。

ここに私のコードです。リセット部分は表示しませんが、主にremoveAllViews()を呼び出してレイアウトを再度生成します。

final RadioGroup optGroup = new RadioGroup(getActivity()); 
optGroup.setOrientation(LinearLayout.HORIZONTAL); 
for(int itemNo = 0; itemNo < cell.getList().countItems(); itemNo++){ 
    RadioButton rButton = new RadioButton(getActivity()); 
    rButton.setText(cell.getList().getItem(itemNo).getLabel()); 
    optGroup.addView(rButton); 
    if(cell.getSelectedListItem().getLabel().equals(cell.getList().getItem(itemNo).getLabel())){ 
     optGroup.check(itemNo+1); 
    } 
} 
optGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(RadioGroup group, int checkedId) { 
     cell.selectListItem(String.valueOf(checkedId)); 
    } 
}); 
linearLayout.addView(optGroup); 

、1から3(I 3つのチェックボックスを持っている)へとリセット後の出力範囲は、それは4から6

EDITの範囲にあるUIをリセットする前に、私は、私の入力をログ

最初のチェックは、3回目の表示範囲が2回目の4から6のように、最初の場合にのみ有効です。

ありがとうございます!

+0

cell.getList()。countItems()の値は何秒ですか? (リセット後)。たぶんリストは消去されておらず、値を複製しているだけかもしれません。 –

+0

リストはまだ同じです。実際、私が生成しなければならないUIは、さまざまな型とすべての値のテーブルから来ています。したがって、リストはセルに保存され、変更できる唯一のセルの値はselectedItemです。残りは同じままです。私はすべての可能なテーブルのためにこのコードの仕事を持っている必要があります。 – dequec64

+1

私は問題はあなたがIDを設定していないことだと思います。 rButton.setId(itemNo)と似ています。しかし、注意してください、itemNoは1(0ではなく)から始める必要があります。それを試してください –

答えて

1

あなたはラジオボタンのID

rButton.setId(itemNo); 

を設定しかし、IDとして0を使用しないように確認する必要があります。 各RadioButton Idは一意でなければならないので、OSは最初に実行されたときに自動生成されたId(1-3)が使用されたことを追跡していると思います。その後、リセット後、4から6になります(3から再開)

関連する問題