Hallo,
ich versuche ein Fragespiel mit ExpandableListView zu machen. Die Groups sind die Fragen und die Childs die Antwortmöglichkeiten, gefüllt wird alles dynamisch. Jetzt stecke ich allerdings beim Speichern der Antworten fest. Es soll ja maximal ein Child pro Group ausgewählt sein. Ich habe jetzt schon mehreres versucht (RadioGroups, BackgroundColor und Arraylist, Hashmap), aber so richtig funktionieren will nichts. Den Sourcecode für das ExpandableListView hab ich von einem Tutorial.
Ich versuche jetzt im OnClickListener die Antwort zu speichern und diese Rot einzufärben. Das mit dem Speichern funktioniert im Grunde ja auch mit der Arraylist, aber ich weiß nicht wie ich auf das richtige Child komme mit der group- und childPosition (bzw. wie ich alle Childs einer Group bekomme). Kann mir jemand weiterhelfen?
Vielen Dank schonmal!
ich versuche ein Fragespiel mit ExpandableListView zu machen. Die Groups sind die Fragen und die Childs die Antwortmöglichkeiten, gefüllt wird alles dynamisch. Jetzt stecke ich allerdings beim Speichern der Antworten fest. Es soll ja maximal ein Child pro Group ausgewählt sein. Ich habe jetzt schon mehreres versucht (RadioGroups, BackgroundColor und Arraylist, Hashmap), aber so richtig funktionieren will nichts. Den Sourcecode für das ExpandableListView hab ich von einem Tutorial.
Java:
public class MyActivity extends Activity {
private List<String> groupList, childList;
private Map<String, List<String>> answerCollection;
private ExpandableListView expListView;
private ArrayList<Integer> chosenAnswers = new ArrayList<Integer>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
createGroupList();
createCollection();
setContentView(R.layout.main);
expListView = (ExpandableListView) findViewById(R.id.expandableListView);
final ExpandableListAdapter expListAdapter = new ExpandableListAdapter(this, groupList, answerCollection);
expListView.setAdapter(expListAdapter);
expListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
long packedPosition;
int packedPositionType;
expListAdapter.addSelection(groupPosition, childPosition, v);
answerCollection.put(expListAdapter.getChild(groupPosition, childPosition) + "", childList);
// expListAdapter.getChildView(2, 2, false, v, parent).setBackgroundColor(Color.BLUE);
System.out.println(parent.getSelectedItemPosition() + " " + parent.getSelectedId());
for (int i = 0; i < parent.getCount(); i++) {
packedPosition = parent.getExpandableListPosition(i);
packedPositionType = ExpandableListView.getPackedPositionType(packedPosition);
if (packedPositionType == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
// parent.getChildAt(i).setBackgroundColor(Color.BLACK);
}
}
for (int i = 0; i < parent.getChildCount(); i++) {
if (parent.getChildAt(i).equals(v)) { //Ausgewähltes Feld nicht einfärben
continue;
}
// parent.getChildAt(i).setBackgroundColor(Color.BLACK);
}
v.setBackgroundColor(Color.RED);
final String selected = (String) expListAdapter.getChild(groupPosition, childPosition);
Toast.makeText(getBaseContext(), selected, Toast.LENGTH_LONG).show();
while (groupPosition > chosenAnswers.size()-1) { //Arraylist Stub-Elemente hinzufügen
chosenAnswers.add(-1);
}
System.out.println(groupPosition + " " + childPosition);
chosenAnswers.set(groupPosition, childPosition); //Antwort abspeichern
// expListView.collapseGroup(groupPosition);
for (int i: chosenAnswers) { System.out.println(i); }
return true;
}
});
}
public void addRadioButtons(int number) {
System.out.println("\n \n \n" + findViewById(R.id.radiogroup));
View parent = findViewById(R.id.expandableListView);
parent.findViewById(R.id.radiogroup);
setContentView(R.layout.child_item);
ViewGroup vwgroup = (ViewGroup) findViewById(R.id.radiogroup);
for(int i = 0; i < 3; i++) {
RadioButton rdbtn = new RadioButton(this);
rdbtn.setId(i);
rdbtn.setText("Radio " + rdbtn.getId());
vwgroup.addView(rdbtn);
}
}
private void createCollection() {
String[] question1Answers = { "Gut", "Super", "Schlecht", "naja"};
String[] question2Answers = { "Ja", "Nein", "Vielleicht"};
answerCollection = new LinkedHashMap<String, List<String>>();
for (String question : groupList) {
if (groupList.get(0).equals(question))
loadChild(question1Answers);
else if (groupList.get(1).equals(question))
loadChild(question2Answers);
answerCollection.put(question, childList);
}
}
private void loadChild(String[] answers) {
childList = new ArrayList<String>();
for (String answer : answers) {
childList.add(answer);
}
}
private void createGroupList() {
groupList = new ArrayList<String>();
grouplist.add("1");
grouplist.add("2");
grouplist.add("3");
grouplist.add("4");
grouplist.add("5");
grouplist.add("6");
Collections.shuffle(groupList);
addRadioButtons(groupList.size());
}
}
Ich versuche jetzt im OnClickListener die Antwort zu speichern und diese Rot einzufärben. Das mit dem Speichern funktioniert im Grunde ja auch mit der Arraylist, aber ich weiß nicht wie ich auf das richtige Child komme mit der group- und childPosition (bzw. wie ich alle Childs einer Group bekomme). Kann mir jemand weiterhelfen?
Vielen Dank schonmal!