title: Expandable ListView with different types of views android
body: <p>I am trying to implement the Expandable listview which consists different types of views such as textviews, editboxes and dropdowns as its childs as below.</p>
  
  <pre><code>Personal Info (Header)
     Name (editbox)
     Gender (spinner)
     Age (editbox)
  
  Address (Header)
     Province (dropdown)
     street (Editbox)
     textview
  </code></pre>
  
  <p>Here is my adapter code. (for only editbox type child)</p>
  
  <pre><code>public class ExpandableListAdapter extends BaseExpandableListAdapter implements
      TextWatcher {
  
  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;
  private ArrayList&lt;EditText&gt; editTextList = new ArrayList&lt;EditText&gt;();
  
  String name, purpose;
  
  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);
  
      String header = _listDataHeader.get(groupPosition);
      System.out.println("Header: " + header);
  
      if (convertView == null) {
          LayoutInflater infalInflater = (LayoutInflater) this._context
                  .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
          convertView = infalInflater.inflate(R.layout.listitem, null);
      }
  
      TextView txtListChild = (TextView) convertView
              .findViewById(R.id.lblListItem);
      txtListChild.setText(childText);
  
      EditText editetext = (EditText) convertView
              .findViewById(R.id.lblListItemEditext);
      editetext.addTextChangedListener(this);
      editTextList.add(editetext);
  
      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.listgroup, 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;
  }
  
  @Override
  public void beforeTextChanged(CharSequence s, int start, int count,
          int after) {
      // TODO Auto-generated method stub
  
  }
  
  @Override
  public void onTextChanged(CharSequence s, int start, int before, int count) {
      // TODO Auto-generated method stub
  
  }
  
  @Override
  public void afterTextChanged(Editable s) {
      // TODO Auto-generated method stub
  
  }
  }
  </code></pre>
  
  <p>screenshot:</p>
  
  <p><a href="https://i.stack.imgur.com/KepfJ.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/KepfJ.png" alt="enter image description here"></a></p>
  
  <p>I have gone through different websites, but i found the solution for only that type of expandable listviews which consists only one type of view.</p>
  
  <p>Thanks.</p>