Ich arbeite an einem Projekt, bei dem JSON von einer URL in ExpandableListView geparst wird. Abhängig vom Wert des Tags "status" (aktiv oder ausstehend) werden Datensätze entsprechend den verschiedenen Gruppen "Active" und "Pending" platziert. Alles funktioniert gut.
Mein Problem ist, wenn ich auf ein Element innerhalb der zweiten Gruppe klicke, das unterschiedliche Daten anzeigen sollte, erhalte ich die Daten des Elements aus der ersten Gruppe.
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ExpandableListActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ExpandableListView;
import android.widget.ListView;
importandroid.widget.SimpleExpandableListAdapter;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ExpandableListView.OnGroupClickListener;
public class ExpandableActivity1 extends ExpandableListActivity {
JSONArray jArray = null;
JSONObject json_data = null;
TextView txtMLSID;
List> child1;
List> child2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
List> groups = new ArrayList>();
Map group1 = new HashMap();
group1.put("group", "Aktiv");
groups.add(group1);
Map group2 = new HashMap();
group2.put("group", "Ausstehend");
groups.add(group2);
child1 = new ArrayList>();
child2 = new ArrayList>();
String url ="http://stage.realtylog.net/iPhone/functions.php?username=hussain16&act=listing";
String json = JSONfunctions.getJSONfromURL(url);
try {
jArray = new JSONArray(json);
for(int i=0; i childdata1 = new HashMap();
JSONObject e = jArray.getJSONObject(i);
String status = e.getString("2");
Log.e("log_tag", "Status: " + status);
if (status.contains("active")) {
Log.e("log_tag", "StatusActive: " + status);
childdata1.put("0", String.valueOf(i+1) + " " + e.getString("mlsid"));
child1.add(childdata1);
} else if (status.contains("pending")) {
Log.e("log_tag", "StatusPending: " + status);
Map childdata2 = new HashMap();
childdata2.put("0", String.valueOf(i+1) + " " + e.getString("mlsid"));
child2.add(childdata2);
}
}
} catch (JSONException e) {
Log.e("log_tag", "Fehler beim Parsen der Daten " + e.toString());
}
List>> childs = new ArrayList>>();
childs.add(child1);
childs.add(child2);
SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(
this, groups, R.layout.groups, new String[] { "group" },
new int[] { R.id.group }, childs, R.layout.childs,
new String[] { "0" }, new int[] { R.id.child });
setListAdapter(adapter);
}
@Override
public boolean setSelectedChild(int groupPosition, int childPosition, boolean shouldExpandGroup) {
//do something
Log.e("log_tag", "setSelectedChild: ");
return super.setSelectedChild(groupPosition, childPosition, shouldExpandGroup);
}
@Override
public void setSelectedGroup(int groupPosition) {
//do something
Log.e("log_tag", "setSelectedGroup: ");
super.setSelectedGroup(groupPosition);
}
// Hier tritt das Problem auf
@SuppressWarnings("unchecked")
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
Log.d("LOG_TAG", "onChildClick: " + "GRUPPE: " + groupPosition + " KIND Position: " + childPosition);
HashMap o = (HashMap) parent.getItemAtPosition(childPosition+1);
String val = o.get("0");
Log.d("LOG_TAG", "ausgewählter Wert: " + val);
return false;
}
}
LogCat-Info, wenn die Methode public boolean onChildClick () aufgerufen wird:
10-20 11:24:28.004: DEBUG/LOG_TAG(1652): onChildClick: GRUPPE: 0 KIND Position: 0
10-20 11:24:28.004: DEBUG/LOG_TAG(1652): ausgewählter Wert: 1 555
10-20 11:24:42.454: DEBUG/LOG_TAG(1652): onChildClick: GRUPPE: 1 KIND Position: 0
10-20 11:24:42.454: DEBUG/LOG_TAG(1652): ausgewählter Wert: 1 555
Der Logcat zeigt, dass ich denselben Wert für Gruppe 1 (Aktiv) und Gruppe 2 (Ausstehend) erhalte.
Ich benötige spezifische Werte für jedes Kind basierend auf dem Klick.