title: Expandable ListView not updating at runtime
body: <p>I am using an <code>AsyncTask</code> to make a url connection and send a request to fatsecret api. The api returns a JSON object which I pass to populateList(JSONArray ja) using <code>onPostExecute()</code>. In the method populateList(), I am  tryin to parse the JSON data so it is visible in an expandable listview. However, when I call <code>listAdapter.notifyDataSetChanged()</code> my listview is not updating. Any help at all will be greatly appreciated. My code is below:</p>
  
  <pre><code> public void populateList(JSONArray ja){
       try{
          for(int i=0; i&lt;ja.length(); i++){
              JSONObject realObj = ja.getJSONObject(i);
  
              foodDatas.add(realObj.getString("food_description"));
              listAdapter.notifyDataSetChanged();
  
              listDataHeader.add(realObj.getString("food_name"));
              listAdapter.notifyDataSetChanged();
  
              foodDatas.add(realObj.getString("food_type"));
              listAdapter.notifyDataSetChanged();
  
              listDataChild.put(listDataHeader.get(i),foodDatas);
              listAdapter.notifyDataSetChanged();
          }
      }catch (Exception exception) {
          Log.e("FatSecret Error", exception.toString());
          exception.printStackTrace();
      }
  }
  </code></pre>
  
  <p>Edit:</p>
  
  <p>This is the custom listAdapter that is being used.</p>
  
  <pre><code>    public class ExpandableListAdapter extends BaseExpandableListAdapter {
  
  private Context _context;
  private List&lt;String&gt; _listDataHeader; // header titles
  // child data in format of header title, child title
  private HashMap&lt;String, List&lt;String&gt;&gt; _listDataChild;
  
  public ExpandableListAdapter(Context context, List&lt;String&gt; listDataHeader,
                               HashMap&lt;String, List&lt;String&gt;&gt; listChildData) {
      this._context = context;
      this._listDataHeader = listDataHeader;
      this._listDataChild = listChildData;
  }
  
  @Override
  public Object getChild(int groupPosition, int childPosititon) {
      return this._listDataChild.get(this._listDataHeader.get(groupPosition))
              .get(childPosititon);
  }
  
  @Override
  public long getChildId(int groupPosition, int childPosition) {
      return childPosition;
  }
  
  @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, null);
      }
  
      TextView txtListChild = (TextView) convertView
              .findViewById(R.id.lblListItem);
  
      txtListChild.setText(childText);
      return convertView;
  }
  
  @Override
  public int getChildrenCount(int groupPosition) {
      return this._listDataChild.get(this._listDataHeader.get(groupPosition))
              .size();
  }
  
  @Override
  public Object getGroup(int groupPosition) {
      return this._listDataHeader.get(groupPosition);
  }
  
  @Override
  public int getGroupCount() {
      return this._listDataHeader.size();
  }
  
  @Override
  public long getGroupId(int groupPosition) {
      return groupPosition;
  }
  
  @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.lblListHeader);
      lblListHeader.setTypeface(null, Typeface.BOLD);
      lblListHeader.setText(headerTitle);
  
      return convertView;
  }
  
  @Override
  public boolean hasStableIds() {
      return false;
  }
  
  @Override
  public boolean isChildSelectable(int groupPosition, int childPosition) {
      return true;
    }
  }
  </code></pre>