title: Not able to implement search in Expandable list view
body: <p>I am trying to implement Search filter in expandable list view.</p>
  
  <p>But when I am trying to enter keyword in editText, application gets crashed.</p>
  
  <p>Below are two java classes of <code>MainActivity</code> and <code>ExpandableListAdapter</code>.</p>
  
  <p><strong>MainActivity class</strong></p>
  
  <pre><code>package com.ahmedabadjobs.dashboard;
  
  import java.util.ArrayList;
  import java.util.HashMap;
  import java.util.List;
  
  import android.app.Activity;
  import android.os.Bundle;
  import android.text.Editable;
  import android.text.TextWatcher;
  import android.view.View;
  import android.widget.EditText;
  import android.widget.ExpandableListView;
  import android.widget.ExpandableListView.OnGroupClickListener;
  import androidhive.dashboard.R;
  
  import com.ahmedabadjobs.expandablelistview.ExpandableListAdapter;
  
  public class MainActivity extends Activity {
      /** Called when the activity is first created. */
  
      ExpandableListAdapter listAdapter;
      ExpandableListView expListView;
      List&lt;String&gt; listDataHeader;
      HashMap&lt;String, List&lt;String&gt;&gt; listDataChild;
      EditText inputSearch;
  
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
  
          // get the listview
          expListView = (ExpandableListView) findViewById(R.id.lvExp);
  
          // preparing list data
          prepareListData();
  
          listAdapter = new ExpandableListAdapter(this, listDataHeader,
                  listDataChild);
  
          // setting list adapter
          expListView.setAdapter(listAdapter);
  
          // Listview Group click listener
          expListView.setOnGroupClickListener(new OnGroupClickListener() {
  
              @Override
              public boolean onGroupClick(ExpandableListView parent, View v,
                      int groupPosition, long id) {
                  // Toast.makeText(getApplicationContext(),
                  // "Group Clicked " + listDataHeader.get(groupPosition),
                  // Toast.LENGTH_SHORT).show();
                  return false;
              }
          });
  
          inputSearch = (EditText) findViewById(R.id.inputSearch);
  
          inputSearch.addTextChangedListener(new TextWatcher() {
  
              @Override
              public void onTextChanged(CharSequence cs, int arg1, int arg2,
                      int arg3) {
                  // ((Filter) listAdapter.getFilter()).filter(cs);
                  NewsFeedActivity.this.listAdapter.getFilter().filter(cs);
              }
  
              @Override
              public void beforeTextChanged(CharSequence arg0, int arg1,
                      int arg2, int arg3) {
                  // TODO Auto-generated method stub
  
              }
  
              @Override
              public void afterTextChanged(Editable arg0) {
                  // When user changed the Text
  
              }
          });
  
      }
  
      /*
       * Preparing the list data
       */
      private void prepareListData() {
          listDataHeader = new ArrayList&lt;String&gt;();
          listDataChild = new HashMap&lt;String, List&lt;String&gt;&gt;();
  
          // Adding child data
          listDataHeader.add("Company 0");
          listDataHeader.add("Company 1");
          listDataHeader.add("Company 2");
  
          // Adding child data
          List&lt;String&gt; cignex = new ArrayList&lt;String&gt;();
          company0.add("Address Line 1");
          company0.add("Address Line 2");
          company0.add("Address Line 3");
          company0.add("Phone number");
          company0.add("Email Address");
  
          List&lt;String&gt; company1 = new ArrayList&lt;String&gt;();
          company1.add("Address Line 1");
          company1.add("Address Line 2");
          company1.add("Address Line 3");
          company1.add("Phone number");
          company1.add("Email Address");
  
          List&lt;String&gt; company2 = new ArrayList&lt;String&gt;();
          company2.add("Address Line 1");
          company2.add("Address Line 2");
          company2.add("Address Line 3");
          company2.add("Phone number");
          company2.add("Email Address");
  
          listDataChild.put(listDataHeader.get(0), company0); // Header, Child
                                                              // data
          listDataChild.put(listDataHeader.get(1), company1);
          listDataChild.put(listDataHeader.get(2), company2);
      }
  
  }
  </code></pre>
  
  <p><strong>ExpandableListAdapter class</strong></p>
  
  <pre><code>package com.ahmedabadjobs.expandablelistview;
  
  import java.util.HashMap;
  import java.util.List;
  
  import android.content.Context;
  import android.graphics.Typeface;
  import android.view.LayoutInflater;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.BaseExpandableListAdapter;
  import android.widget.Filter;
  import android.widget.Filterable;
  import android.widget.TextView;
  import androidhive.dashboard.R;
  
  public class ExpandableListAdapter extends BaseExpandableListAdapter implements
          Filterable {
  
      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;
      }
  
      @Override
      public Filter getFilter() {
          // TODO Auto-generated method stub
          return null;
      }
  
  }
  </code></pre>
  
  <p>I am getting bellow error when providing keyword in editText.</p>
  
  <pre><code>12-09 03:37:48.080: E/InputEventSender(1139): Exception dispatching finished signal.
  12-09 03:37:48.080: E/MessageQueue-JNI(1139): Exception in MessageQueue callback: handleReceiveCallback
  12-09 03:37:48.161: E/MessageQueue-JNI(1139): java.lang.NullPointerException
  </code></pre>
  
  <p>Please let me know what changes I need to make to make it functional.</p>