私はアンドロイドアプリで機器の検査フォームを複製しています。グループデータはマシンの異なるシステムで構成され、子データにはアイテムのチェックリストが含まれ、技術者がアイテムの合格/不合格のステータスを示すためのRadioGroupを含むExpandableListViewがあります。 1つの子でRadioButtonの値を選択する場合を除いて、他のグループの同じRadioButtonの値が選択されます。私が持っていたのであれば:ExpandableListView with RadioButtons 1つのラジオグループの値を選択し、グループが展開されるといくつかの詳細が選択されます
Group 1
Question 1
Passed
Failed
Corrected
NA
Question 2
Passed
Failed
Corrected
NA
Group 2
Question 1
Passed
Failed
Corrected
NA
Question 2
Passed
Failed
Corrected
NA
を私が選択した場合は拡張したとき、1またはRadioGroupsの両方も選択が合格していますが、これまでグループ2に行ったことなくて、グループ1の両方の質問に渡されました。
私はRADIOGROUPと子グループを作成するために使用していレイアウトが
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginLeft="15dip">
<TextView
android:id="@+id/questionText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<RadioGroup
android:tag="actionGroup"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RadioButton
android:tag="passed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Passed"/>
<RadioButton
android:tag="failed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Failed"/>
<RadioButton
android:tag="corrected"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Corrected"/>
<RadioButton
android:tag="na"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NA"/>
</RadioGroup>
</LinearLayout>
BaseExpandableListAdapter
のインスタンスExpandableListView inspectionQuestions = (ExpandableListView) FindViewById(Android.Resource.Id.List);
inspectionQuestions.SetAdapter(new ExpAdapter(this));
のように見えますBaseExpandableListAdapter
public class ExpAdapter : BaseExpandableListAdapter
{
private readonly Context context;
Questions questions = new Questions();
private int seed = 1000;
public ExpAdapter(Context ctx)
{
context = ctx;
}
public override Object GetChild(int groupPosition, int childPosition)
{
return null;
}
public override long GetChildId(int groupPosition, int childPosition)
{
return 0;
}
public override View GetChildView(int groupPosition, int childPosition, bool isLastChild, View convertView, ViewGroup parent)
{
if (convertView == null)
{
LayoutInflater inflater = (LayoutInflater) context.GetSystemService(Context.LayoutInflaterService);
convertView = inflater.Inflate(Resource.Layout.inspection_row_2, null);
}
int currentID;
TextView question = (TextView) convertView.FindViewById(Resource.Id.questionText);
RadioGroup radio = (RadioGroup) convertView.FindViewWithTag("actionGroup");
radio.Id = seed++;
RadioButton pass = (RadioButton) convertView.FindViewWithTag("passed");
pass.Id = seed++;
RadioButton fail = (RadioButton) convertView.FindViewWithTag("failed");
fail.Id = seed++;
RadioButton correct = (RadioButton)convertView.FindViewWithTag("corrected");
correct.Id = seed++;
RadioButton na = (RadioButton)convertView.FindViewWithTag("na");
na.Id = seed++;
string[][] items = questions.childItems();
question.Text = items[groupPosition][childPosition];
return convertView;
}
public override int GetChildrenCount(int groupPosition)
{
return questions.childItems()[groupPosition].Length;
}
public override Object GetGroup(int groupPosition)
{
return null;
}
public override long GetGroupId(int groupPosition)
{
return 0;
}
public override View GetGroupView(int groupPosition, bool isExpanded, View convertView, ViewGroup parent)
{
if (convertView == null)
{
LayoutInflater inflater = (LayoutInflater) context.GetSystemService(Context.LayoutInflaterService);
convertView = inflater.Inflate(Android.Resource.Layout.SimpleExpandableListItem1, null);
}
TextView groupName = (TextView) convertView.FindViewById(Android.Resource.Id.Text1);
QuestionGrouper grouper = new QuestionGrouper();
groupName.Text = grouper.groupItems()[groupPosition];
return convertView;
}
public override bool IsChildSelectable(int groupPosition, int childPosition)
{
return true;
}
public override int GroupCount
{
get { return 9; }
}
public override bool HasStableIds
{
get { return false; }
}
}
提案あたりEDITED GetChildView:
public override View GetChildView(int groupPosition, int childPosition, bool isLastChild, View convertView, ViewGroup parent)
{
if (convertView == null)
{
LayoutInflater inflater = (LayoutInflater) context.GetSystemService(Context.LayoutInflaterService);
convertView = inflater.Inflate(Resource.Layout.inspection_row_2, null);
}
TextView question = (TextView) convertView.FindViewById(Resource.Id.questionText);
RadioGroup radio = (RadioGroup) convertView.FindViewById(Resource.Id.activityGroup);
int count = radio.ChildCount;
if (count == 4)
{
return convertView;
}
RadioButton pass = new RadioButton(context) {Text = "Passed"};
RadioButton fail = new RadioButton(context) {Text = "Failed"};
RadioButton correct = new RadioButton(context) {Text = "Corrected"};
RadioButton na = new RadioButton(context) {Text = "NA"};
radio.AddView(pass);
radio.AddView(fail);
radio.AddView(correct);
radio.AddView(na);
string[][] items = questions.childItems();
question.Text = items[groupPosition][childPosition];
return convertView;
}
私はExpandableListAdapterのグループ2のレイアウトとして上記のレイアウトを割り当てているだけなので、私はそれを行う方法がわかりません。各RadioButtonにどのように新しいIDを割り当てるのですか? – jmease
私はSimpleExpandableListAdapterであまり働いていません。だから私はあまりにも肯定的ではない。残りのレイアウトxmlを投稿できますか?私はあなたがそこにいるものがどのようにグループごとに2つの質問に翻訳されるのか、本当にわかりません。 – Brayden
それはレイアウト全体です。 SimpleExpandableListAdaptersはグループ化データを取得し、最初に提供したレイアウト(Android.Resource.Layout.SimpleExpandableListItem1)を適用してから、子データのグループ化を行い、上記のレイアウトである2番目のレイアウトを適用します。 – jmease