ExpandableListView
解析された JSON ファイルから入力したいと思います。
目標は、最初のエントリ (kontakt_titel) をグループのタイトルとして配置し、他のすべてを子として配置することです...
JSON ファイルは次のようになります。
{
"contact":[
{
"kontakt_titel":"Berlin",
"adresse_strasse":"Hauptstrasse 1",
"adresse_plzort":"4000 Berlin",
"telefon":"123456789",
"fax":"123456780",
"email":"berlin@123.com",
"website":"www.berlin.123.com"
},
{
"kontakt_titel":"London",
"adresse_strasse":"East Highway 1",
"adresse_plzort":"London",
"telefon":"123456789",
"fax":"123456780",
"email":"london@123.com",
"website":"www.london.123.com"
},
{
"kontakt_titel":"New York",
"adresse_strasse":"Time Square 1",
"adresse_plzort":"12345",
"telefon":"123456789",
"fax":"123456780",
"email":"newyork@123.com",
"website":"www.newyork.123.com"
}
]
}
これは、これらの要素を ExpandableListView に解析するコードです。
try {
JSONArray jContact = json.getJSONArray("contact");
for (int i = 0; i < jContact.length(); i++) {
JSONObject c4 = jContact.getJSONObject(i);
String contact_title = c4.getString("kontakt_titel");
String adresse_strasse = c4.getString("adresse_strasse");
String adresse_plzort = c4.getString("adresse_plzort");
String telefon = c4.getString("telefon");
String fax = c4.getString("fax");
String email = c4.getString("email");
String website = c4.getString("website");
if (contact_title != null && !contact_title.equals("")) {
contactTitles.add(contact_title);
} else {
contactTitles.add("");
}
if (adresse_strasse != null && !adresse_strasse.equals("")) {
contactAddressStreet.add(adresse_strasse);
} else {
contactAddressStreet.add("");
}
if (adresse_plzort != null && !adresse_plzort.equals("")) {
contactAddressPlzOrt.add(adresse_plzort);
} else {
contactAddressPlzOrt.add("");
}
if (telefon != null && !telefon.equals("")) {
contactTelephone.add(telefon);
} else {
contactTelephone.add("");
}
if (fax != null && !fax.equals("")) {
contactFax.add(fax);
} else {
contactFax.add("");
}
if (email != null && !email.equals("")) {
contactEmail.add(email);
} else {
contactEmail.add("");
}
if (website != null && !website.equals("")) {
contactWebsite.add(website);
} else {
contactWebsite.add("");
}
}
} catch (JSONException e) {
errorHappened = true;
} catch (NullPointerException npe) {
errorHappened = true;
}
これはすべて機能していると思います...しかし、ここに私のエラーがどこかにあると思います...これは、getChildView()
拡張するアダプターのメソッドですBaseExpandableListAdapter
:
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) myContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.row_contact, null);
}
TextView tvPlayerName = (TextView) convertView
.findViewById(R.id.tvPlayerName);
switch (childPosition) {
case 0:
tvPlayerName
.setText(MainActivity.contactAddressStreet.get(childPosition));
break;
case 1:
tvPlayerName
.setText(MainActivity.contactAddressPlzOrt.get(childPosition));
break;
case 2:
tvPlayerName
.setText(MainActivity.contactTelephone.get(childPosition));
break;
case 3:
tvPlayerName
.setText(MainActivity.contactFax.get(childPosition));
break;
case 4:
tvPlayerName
.setText(MainActivity.contactEmail.get(childPosition));
break;
case 5:
tvPlayerName
.setText(MainActivity.contactWebsite.get(childPosition));
break;
case 6:
tvPlayerName
.setText(MainActivity.contactOpening.get(childPosition));
break;
}
return convertView;
}
問題は、すべてのグループのすべての子に対して常に同じエントリを取得することです。すべての子の最初のエントリ (Berlin) を最初とし、すべての子の 2 番目のエントリ (East Highway 1) を 2 番目とします。