Android アプリでラジオ グループの拡張可能なリストを作成したいと考えています。リストの各要素には、(開いたときに) いくつかの個別のラジオ グループが含まれている必要があります。これまでのところ、子供ごとに 1 つのラジオグループだけでテストしていますが、すでに自分では解決できないような問題に直面しています。
展開可能なリストの親を展開すると、正しく機能しているようです。ラジオグループ (現時点では親の唯一の子要素) のラジオボタンは、本来あるべき方法で表示されます。ただし、展開可能なリストの別の親を展開すると、ラジオ ボタンが他の子グループの既存のボタンに追加されます。つまり、いくつかの子グループを展開すると、展開された子グループのそれぞれに大量のラジオ ボタンが含まれ、画面全体があふれます。簡単に言えば、親 1 を展開すると選択肢が表示されます
- はい
- 番号
- 多分
2 番目の親を展開すると、ラジオの選択肢が表示されます
- はい
- 番号
- 多分
- はい
- 番号
- 多分
- おそらく
...これは、親 1 内のラジオ ボタン グループにも追加されます。これで、2 つの大きな展開されたリスト要素ができました。別のグループを展開すると、選択肢がすべての子ビューにも追加されます。
したがって、単純なロジックに従うと、すべてのラジオ ボタンが新しいグループ (子リストを展開するたびに新しく作成される) に配置されるのではなく、同じ既存のグループに追加されるように見えます。
ExpandableListAdapter クラス内の getChildView 関数に問題をほぼ切り分けることができました。これは、上記の出力を引き起こすコードです。
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View view,
ViewGroup parent) {
ExpandListChild child = (ExpandListChild) getChild(groupPosition, childPosition);
if (view == null) {
LayoutInflater infalInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = infalInflater.inflate(R.layout.child_layout, null);
}
ArrayList<HashMap<String,String>> inputDetailsList = child.getInputfields();
//RadioGroup rg = new RadioGroup(view.getContext());
RadioGroup rg = (RadioGroup) view.findViewById(R.id.radiogroup);
int has_radiogroup = 0;
for (int i = 0; i <inputDetailsList.size(); i++){
if (inputDetailsList.get(i).get("type").equals("radio")){
has_radiogroup = 1;
RadioButton rb = new RadioButton(rg.getContext());
rb.setText(inputDetailsList.get(i).get("textcontent"));
rg.addView(rb);
}
}
return view;
}
子レイアウトとして使用される xml ファイルは次のとおりです。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="55dip"
android:background="@color/ExpandChildBackground"
android:orientation="vertical" >
<TextView
android:id="@+id/tvChild"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="@color/Black"
android:textSize="17dip" />
<RadioGroup
android:id="@+id/radiogroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
>
</RadioGroup>
</LinearLayout>
私のエラーが疑われる行は次のとおりです。
RadioGroup rg = (RadioGroup) view.findViewById(R.id.radiogroup);
インフレートされた子レイアウト (R.layout.child_layout) 内で作成したラジオ グループを探します。ただし、展開された子ビューごとに新しいものを使用するのではなく、既存のものを使用してボタンを適用します。言い換えれば、ラジオグループが「終了」したという兆候を決して得ないように見え、および/または子ビューが古いラジオグループの代わりに新しいラジオグループを使用する必要があるという兆候を決して得ないようです。
私が試したのは、レイアウトで定義したラジオグループを使用する代わりに、次の行を使用して子ビューごとに新しい RadioGroup を作成することです (上記のコードのコメント行であることがわかります)。新しいラジオグループを作成すると、次のようになります。
RadioGroup rg = new RadioGroup(view.getContext());
ただし、これは機能しません。ラジオ グループは表示されず、ボタンはまったく表示されません。また、レイアウト xml ファイルから radiogroup 要素を削除しようとしました (とにかく使用されないため)。まだ運がありません。各要素に単純な整理されていないテキストビューを使用すると、適切に機能するように見えるため、これはラジオ グループの実装にも問題があることを示しています。
正直なところ、私は今アイデアがありません。間違ったコンテキストを取得している可能性がありますが、使用するコンテキストがわかりません。誰かが私を正しい方向に向けることができれば、私は非常に感謝しています. 前もって感謝します。