0

Je souhaite créer un listview extensible dans mon projet.Android Expandable ListView Enfant ne pas afficher

ExpandableListViewAdapter.Java

public class ExpandableListAdapter extends BaseExpandableListAdapter { 
private Context _context; 
private List<itemGroupAddon> _listDataHeader; 

private HashMap<List<itemGroupAddon>, List<ItemAddon>> _listDataChild; 

public ExpandableListAdapter(Context context, List<itemGroupAddon> listDataHeader, 
          HashMap<List<itemGroupAddon>, List<ItemAddon>> listChildData) { 
    this._context = context; 
    this._listDataHeader = listDataHeader; 
    this._listDataChild = listChildData; 
} 

@Override 
public long getChildId(int groupPosition, int childPosititon) { 
    return childPosititon; 
} 

@Override 
public int getChildrenCount(int groupPosition) { 
    return this._listDataChild.get(this._listDataHeader.get(groupPosition)).size(); 
} 

@Override 
public Object getChild(int groupPosition, int childPosititon) { 
    return this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
      .get(childPosititon).getNama_addon(); 
} 

@Override 
public int getGroupCount() { 
    return this._listDataHeader.size(); 
} 

@Override 
public Object getGroup(int groupPosition) { 
    return this._listDataHeader.get(groupPosition).getAddon_group_name(); 
} 

@Override 
public long getGroupId(int groupPosition) { 
    return groupPosition; 
} 

@Override 
public boolean hasStableIds() { 
    return false; 
} 

@Override 
public View getGroupView(int groupPosition, boolean isExpanded, 
         View convertView, ViewGroup parent) { 
    String headerTitle = (String) getGroup(groupPosition); 
    if (convertView == null) { 
     LayoutInflater infalInflater = (LayoutInflater) this._context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = infalInflater.inflate(R.layout.list_group, null); 
    } 

    TextView lblListHeader = (TextView) convertView 
      .findViewById(R.id.tvModifier); 
    lblListHeader.setText(headerTitle); 

    return convertView; 
} 

@Override 
public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, 
         View convertView, ViewGroup parent) { 
    final String childText = (String) getChild(groupPosition, childPosition); 

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

    TextView txtListChild = (TextView) convertView 
      .findViewById(R.id.lblListItem); 

    txtListChild.setText(childText); 
    return convertView; 
} 

@Override 
public boolean isChildSelectable(int i, int i1) { 
    return false; 
} 

}

Ceci est la procédure que je mets dans mon activité pour appeler les données. Je reçois les données de ma base de données sqlite.

public void PrepareListData(int itemID,int OutletID) 
{ 
    listHeaderData = new ArrayList<>(); 
    listData = new ArrayList<>(); 
    listDataChild = new HashMap<List<itemGroupAddon>, List<ItemAddon>>(); 
    listHeaderData = db.getAllItemGroup(itemID); 

    for(itemGroupAddon items : listHeaderData){ 
     listData= db.getAddonItemList(items.getItem_addon_group_id(),outletID); 
    } 

    listDataChild.put(listHeaderData,listData); 
} 

Dans mon OnCreate je l'appelle comme ça

PrepareListData(itemId,outletID); 
adapterExpList = new ExpandableListAdapter(getActivity(), listHeaderData, listDataChild); 
lvModifier.setAdapter(adapterExpList); 

quand je lance le programme, il montre en-tête seulement, mais les données de l'enfant ne montre pas. Lorsque je clique sur l'en-tête pour développer childData j'ai eu une erreur fatale

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.project.pos.posandroid, PID: 28411 
       java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference 
        at com.project.pos.posandroid.Adapter.ExpandableListAdapter.getChildrenCount(ExpandableListAdapter.java:41) 
        at android.widget.ExpandableListConnector.refreshExpGroupMetadataList(ExpandableListConnector.java:563) 
        at android.widget.ExpandableListConnector.expandGroup(ExpandableListConnector.java:688) 
        at android.widget.ExpandableListView.handleItemClick(ExpandableListView.java:696) 
        at android.widget.ExpandableListView.performItemClick(ExpandableListView.java:656) 
        at android.widget.AbsListView$PerformClick.run(AbsListView.java:3066) 
        at android.widget.AbsListView.onTouchUp(AbsListView.java:3915) 
        at android.widget.AbsListView.onTouchEvent(AbsListView.java:3680) 
        at android.view.View.dispatchTouchEvent(View.java:9333) 
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2548) 
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2241) 
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554) 
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255) 
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554) 
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255) 
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554) 
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255) 
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554) 
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255) 
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554) 
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255) 
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554) 
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255) 
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554) 
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255) 
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554) 
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255) 
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554) 
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255) 
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554) 
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255) 
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554) 
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255) 
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554) 
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255) 
        at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2403) 
        at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1737) 
        at android.app.Dialog.dispatchTouchEvent(Dialog.java:787) 
        at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:71) 
        at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2364) 
        at android.view.View.dispatchPointerEvent(View.java:9553) 
        at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4248) 
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4101) 
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3647) 
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3700) 
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3666) 
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3792) 
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3674) 
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3849) 
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3647) 
       at android.view.ViewRootImpl$InputStage 

Le spectacle d'erreur à mon cette partie de mon adaptateur

return this._listDataChild.get(this._listDataHeader.get(groupPosition)).size(); 

S'il vous plaît me aider à résoudre ce problème. Merci à l'avance

+0

double possible de [Qu'est-ce qu'un NullPointerException, et comment puis-je résoudre ce problème?] (http://stackoverflow.com/questions/218384/quoi-est-une-nullpointerexception-and-how-do-i-fix-it) –

Répondre

0

Je pense que le problème est dans cette ligne listDataChild = new HashMap<List<itemGroupAddon>, List<ItemAddon>>(); vous créez un HashMap avec la liste <> comme une clé qui n'est pas un moyen approprié pour définir une HashMap puisque votre liste est mutable. voir ici ArrayList as key in Hashmap

Vérifiez également si votre listData est non nul après avoir interrogé la db

listData= db.getAddonItemList(items.getItem_addon_group_id(),outletID);