Ich repliziere ein Inspektionsformular für ein Gerät in einer Android-App. Es gibt eine ExpandableListView, bei der Gruppendaten aus den verschiedenen Systemen der Maschine bestehen und die Child-Daten die Checkliste der Elemente mit einer RadioGroup enthalten, damit der Techniker den Bestanden/Fehlgeschlagen-Status des Artikels anzeigen kann. Alles funktioniert gut, außer wenn man einen Wert für einen RadioButton in einem Kind auswählt, wählt er einen Wert für den gleichen RadioButton in anderen Gruppen. Also, wenn ich hatte:ExpandableListView mit RadioButtons. Wählen Sie Wert für eine RadioGroup, mehrere weitere ausgewählt werden, wenn Gruppe erweitert
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
Wenn ich in beiden Fragen in der Gruppe 1 Bestanden wählen, ohne jemals in Gruppe 2 gegangen, wenn erweitert, 1 oder beide der RadioGroups wird es auch ausgewählt bestanden hat.
Das Layout Ich bin mit dem Kind-Gruppe zu schaffen, mit der Radiogroup wie
<?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>
Instanziierung 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 pro Vorschlag sieht:
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;
}
Ich bin nicht sicher, wie das geht, da ich nur das obige Layout als das Layout für Gruppe 2 in meinem ExpandableListAdapter zuweisen. Wie würde ich jedem RadioButton eine neue ID zuweisen? – jmease
Ich habe nicht viel mit SimpleExpandableListAdapter gearbeitet. Ich bin also nicht sehr positiv. Können Sie den Rest Ihres Layout-XMLs posten? Ich sehe nicht wirklich, wie das, was du da oben hast, zu den 2 Fragen pro Gruppe übersetzt. – Brayden
Das ist das gesamte Layout. SimpleExpandableListAdapters nehmen Ihre Gruppierungsdaten und wenden das erste von Ihnen bereitgestellte Layout an (z. B. Android.Resource.Layout.SimpleExpandableListItem1) und dann die untergeordnete Datengruppierung und wenden das von Ihnen bereitgestellte zweite Layout an, das das oben beschriebene Layout ist. – jmease