-2

J'ai un problème. Ma vue de liste extensible produit une erreur lorsque je clique sur le groupe (je veux ouvrir le groupe et montrer les enfants). Voici le résultat du chat.android - Extensible Affichage de la liste Erreur: getChild Cause Index Array sur Bound

09-24 01:44:47.987: E/AndroidRuntime(15754): FATAL EXCEPTION: main 
09-24 01:44:47.987: E/AndroidRuntime(15754): Process: jkos.development.sioba, PID: 15754 
09-24 01:44:47.987: E/AndroidRuntime(15754): java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2 
09-24 01:44:47.987: E/AndroidRuntime(15754): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) 
09-24 01:44:47.987: E/AndroidRuntime(15754): at java.util.ArrayList.get(ArrayList.java:308) 
09-24 01:44:47.987: E/AndroidRuntime(15754): at jkos.development.sioba.adapter.TumbuhanObatDetailAdapter.getChild(TumbuhanObatDetailAdapter.java:49) 
09-24 01:44:47.987: E/AndroidRuntime(15754): at jkos.development.sioba.adapter.TumbuhanObatDetailAdapter.getChildView(TumbuhanObatDetailAdapter.java:95) 
09-24 01:44:47.987: E/AndroidRuntime(15754): at android.widget.ExpandableListConnector.getView(ExpandableListConnector.java:451) 
09-24 01:44:47.987: E/AndroidRuntime(15754): at android.widget.AbsListView.obtainView(AbsListView.java:2257) 
09-24 01:44:47.987: E/AndroidRuntime(15754): at android.widget.ListView.measureHeightOfChildren(ListView.java:1263) 
09-24 01:44:47.987: E/AndroidRuntime(15754): at android.widget.ListView.onMeasure(ListView.java:1175) 
09-24 01:44:47.987: E/AndroidRuntime(15754): at android.view.View.measure(View.java:16525) 

ici est ma classe adaptateur

public class TumbuhanObatDetailAdapter extends BaseExpandableListAdapter { 

private Context _context; 
private ArrayList<String> listHeader; 
private HashMap<String, List<String>> listItem; 

public TumbuhanObatDetailAdapter(Context context, ArrayList<String> listHeader, HashMap<String, List<String>> listItem){ 
    this._context = context; 
    this.listHeader = listHeader; 
    this.listItem = listItem; 
} 
@Override 
public int getGroupCount() { 
    // TODO Auto-generated method stub 
    return this.listHeader.size(); 
} 

@Override 
public int getChildrenCount(int groupPosition) { 
    // TODO Auto-generated method stub 
    return this.listItem.size(); 
} 

@Override 
public Object getGroup(int groupPosition) { 
    // TODO Auto-generated method stub 
    return this.listHeader.get(groupPosition); 
} 

@Override 
public Object getChild(int groupPosition, int childPosition) { 
    // TODO Auto-generated method stub 
    //return this._listItem.get(this._listHeader.get(groupPosition)).get(childPosition); 
    return this.listItem.get(listHeader.get(groupPosition)).get(childPosition); 
} 

@Override 
public long getGroupId(int groupPosition) { 
    // TODO Auto-generated method stub 
    return groupPosition; 
} 

@Override 
public long getChildId(int groupPosition, int childPosition) { 
    // TODO Auto-generated method stub 
    return childPosition; 
} 

@Override 
public boolean hasStableIds() { 
    // TODO Auto-generated method stub 
    return true; 
} 

@Override 
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    String headerTitle = (String) getGroup(groupPosition); 
    if (convertView == null) { 
     LayoutInflater infalInflater = (LayoutInflater) this._context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = infalInflater.inflate(R.layout.tumbuhanobatdetailgroupitem, null); 
    } 

    TextView lblListHeader = (TextView) convertView.findViewById(R.id.expandableListViewHeader); 
    lblListHeader.setTypeface(null, Typeface.BOLD); 
    lblListHeader.setText(headerTitle); 

    return convertView; 


    //return null; 
} 

@Override 
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    //System.out.println("group : "+groupPosition+" child : "+childPosition); 

    String childText = (String) getChild(groupPosition, childPosition); 

    if (convertView == null) { 
     LayoutInflater infalInflater = (LayoutInflater) this._context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = infalInflater.inflate(R.layout.tumbuhanobatdetailchilditem, null); 
    } 

    TextView txtListChild = (TextView) convertView.findViewById(R.id.childItem); 
    txtListChild.setText(childText); 
    return convertView; 

    //return null; 
} 

@Override 
public boolean isChildSelectable(int groupPosition, int childPosition) { 
    // TODO Auto-generated method stub 
    return true; 
} 

}

est ici une section où l'adaptateur est appelé dans mon activité java

ArrayList<String>listHeader = new ArrayList<String>(); 
    HashMap<String, List<String>>listItem = new HashMap<String, List<String>>(); 
    listHeader.add("Umum"); 
    listHeader.add("Simplisia"); 
    listHeader.add("Kegunaan Empiris"); 


    List<String> umum = new ArrayList<String>(); 
    umum.add(namaIndonesia); 
    umum.add(namaLatin); 

    List<String> simplisia = new ArrayList<String>(); 
    for(int i = 0; i < namaSimplisia.size(); i++){ 
     simplisia.add(namaSimplisia.get(i)); 
    } 

    List<String> penggunaanEmpiris = new ArrayList<String>(); 
    for(int i = 0; i < kegunaanEmpiris.size(); i++){ 
     penggunaanEmpiris.add(kegunaanEmpiris.get(i)); 
    } 

    listItem.put(listHeader.get(0), umum); 
    listItem.put(listHeader.get(1), simplisia); 
    listItem.put(listHeader.get(2), penggunaanEmpiris); 

    tumbuhanObatDetailAdapter = new TumbuhanObatDetailAdapter(context, listHeader, listItem); 
    expandableListView.setAdapter(tumbuhanObatDetailAdapter); 

S'il vous plaît je besoin d'une réponse dès possible

+0

Quel débogage avez-vous fait avant de poster ici? Définir des points d'arrêt? – CubeJockey

+0

J'essaie juste de savoir quelle est la valeur groupposition et childposition qui provoque un index hors limite. Une idée? –

Répondre

0

Le tableau est 0-indexé - ce qui signifie que le tableau contient l'objet 0 et objet 1, et non objet 1 et de l'objet 2, donc il suffit de retirer 1 avant d'appeler votre fonction

Modifier cette

String childText = (String) getChild(groupPosition, childPosition); 

à cette

String childText = (String) getChild(groupPosition - 1, childPosition); 
+0

Quel tableau et comment l'enlever? S'il vous plaît, donnez-moi quelques codes pour clarifier votre compréhension. Je vous remercie. :) –

1

Changer votre code getChildrenCount() à ceci:

public int getChildrenCount(int groupPosition) { 
    // TODO Auto-generated method stub 
    return this.listItem.get(groupPosition).size(); 
} 

Vous donnez la taille de la hashmap complète en tant que nombre d'enfants dans le groupe particulier. C'est pourquoi il provoque IndexOutOfBoundException.