title: How to get checkbox state in expandable listview in android
body: <p>I want to know checkbox state in expandable listview in my application data come from server.</p>
  
  <p>My <strong>ProductsCategory.java</strong>:-</p>
  
  <pre><code>    public class ProductsCategory extends AppCompatActivity {
  
      private ListView listView;
      private GridView gridView;
      ProductsAdapter  adapter;
      ProductsAdapterGridView adapterGridView;
      ArrayList&lt;Products&gt; productsList = new ArrayList&lt;&gt;();
      String menu_id;
      TextView textView,textViewfilter;
  
      // Filter Class
      ExpandableListAdapter listAdapter;
      ExpandableListView expListView;
      List&lt;String&gt; listDataHeader = new ArrayList&lt;&gt;();
      HashMap&lt;String, List&lt;String&gt;&gt; listDataChild = new HashMap&lt;&gt;();
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.produts_category);
  
          Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
          setSupportActionBar(mToolbar);
          getSupportActionBar().setTitle("Shopping Mazza");
          getSupportActionBar().setDisplayHomeAsUpEnabled(true);
          getSupportActionBar().setDisplayShowHomeEnabled(true);
  
          Intent i = getIntent();
          menu_id = i.getStringExtra("category");
          adapter = new ProductsAdapter(ProductsCategory.this,R.layout.product_page_list_view,productsList);
          adapterGridView = new ProductsAdapterGridView(ProductsCategory.this,R.layout.products_page_grid_view,productsList);
          expListView = (ExpandableListView) findViewById(R.id.filter_expandable_list_view);
          listView = (ListView)findViewById(R.id.list_product);
          gridView = (GridView)findViewById(R.id.list_product_grid);
          textView = (TextView)findViewById(R.id.change_view);
          textViewfilter = (TextView)findViewById(R.id.textView);
  
          textView.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  if(listView.getVisibility()==View.VISIBLE){
                      listView.setVisibility(View.GONE);
                      gridView.setVisibility(View.VISIBLE);
                  }
                  else {
                      listView.setVisibility(View.VISIBLE);
                      gridView.setVisibility(View.GONE);
                  }
              }
          });
  
          textViewfilter.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  if (expListView.getVisibility() == View.VISIBLE) {
  
                      listDataHeader.clear();
                      listDataChild.clear();
  
                      listAdapter = new ExpandableListAdapter(ProductsCategory.this, listDataHeader, listDataChild);
                      expListView.setAdapter(listAdapter);
  
                      listAdapter.notifyDataSetChanged();
                      expListView.setVisibility(View.GONE);
                  }
                  else {
                          expListView.setVisibility(View.VISIBLE);
  
                      // preparing list data
                      //    prepareListData();
                      new PrepareListData().execute("http://opencart.codeniques.com/shopping/?route=feed/web_api/filters&amp;key=test123$");
  
                      // Listview Group click listener
                      expListView.setOnGroupClickListener(new ExpandableListView.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;
  
                          }
                      });
  
                      // Listview Group expanded listener
                      expListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
  
                          @Override
                          public void onGroupExpand(int groupPosition) {
                              Toast.makeText(getApplicationContext(),
                                      listDataHeader.get(groupPosition) + " Expanded",
                                      Toast.LENGTH_SHORT).show();
                          }
                      });
  
                      // Listview Group collasped listener
                      expListView.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener() {
  
                          @Override
                          public void onGroupCollapse(int groupPosition) {
                              Toast.makeText(getApplicationContext(),
                                      listDataHeader.get(groupPosition) + " Collapsed",
                                      Toast.LENGTH_SHORT).show();
  
                          }
                      });
  
                      // Listview on child click listener
                      expListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
  
                          @Override
                          public boolean onChildClick(ExpandableListView parent, View v,
                                                      int groupPosition, int childPosition, long id) {
  
                              Toast.makeText(
                                      getApplicationContext(),
                                      listDataHeader.get(groupPosition)
                                              + " : "
                                              + listDataChild.get(
                                              listDataHeader.get(groupPosition)).get(
                                              childPosition), Toast.LENGTH_SHORT)
                                      .show();
                              return false;
                          }
                      });
  
                   /*   Intent i = new Intent(ProductsCategory.this,FilterClass.class);
                      i.putExtra("category_id",menu_id);
                      startActivity(i);*/
                  }
              }
          });
  
          new Product().execute("http://opencart.codeniques.com/shopping/?route=feed/web_api/products&amp;key=test123$");
      }
      public class PrepareListData extends AsyncTask&lt;String,Void,Void&gt;{
          ProgressDialog dialog;
          @Override
          protected synchronized void onPreExecute() {
              super.onPreExecute();
              dialog = new ProgressDialog(ProductsCategory.this);
              dialog.setCancelable(false);
              dialog.show();
          }
  
          @Override
          protected synchronized  Void doInBackground(String... params) {
              try {
                  HttpClient client = new DefaultHttpClient();
                  HttpPost post = new HttpPost(params[0]);
                  List&lt;NameValuePair&gt; nameValuePairs = new ArrayList&lt;&gt;(1);
  
                  nameValuePairs.add(new BasicNameValuePair("category",menu_id));
                  post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
  
                  HttpResponse response = client.execute(post);
  
                  if(response.getStatusLine().getStatusCode()==200){
  
                      HttpEntity entity = response.getEntity();
                      String data = EntityUtils.toString(entity);
  
                      JSONObject jsonObject = new JSONObject(data);
                      JSONArray jsonArray = jsonObject.getJSONArray("filters");
  
                      //     Log.d("jsonarray",jsonArray.length()+"");
  
                      Log.d("filter",jsonArray+"");
  
                      for(int i=0;i&lt;jsonArray.length();i++){
  
                          JSONObject jsonObject1 = jsonArray.getJSONObject(i);
  
                          String s = jsonObject1.getString("filter_group_id");
                          listDataHeader.add(jsonObject1.getString("name"));
  
                          JSONArray jsonArray1 = jsonObject1.getJSONArray("filter");
  
                          List&lt;String&gt; firstlevel = new ArrayList&lt;&gt;();
                          for(int j=0;j&lt;jsonArray1.length();j++){
  
                              JSONObject jsonObject11 = jsonArray1.optJSONObject(j);
  
                              String s1 = jsonObject11.getString("filter_id");
                              String colorcode = jsonObject11.getString("colorcode");
                              firstlevel.add(jsonObject11.getString("name"));
                          }
                          listDataChild.put(listDataHeader.get(i), firstlevel);
                          Log.d("listDataHeader", listDataHeader.get(i)+"");
                          Log.d("value of", firstlevel + "");
                          Log.d("hash map", listDataChild.size() + "");
                          //  firstlevel.clear();
                      }
                  }
              }catch (IOException |JSONException e){
                  Log.e("Error :", e.getMessage());
              }
              return null;
          }
          @Override
          protected synchronized void onPostExecute(Void aVoid) {
              //  super.onPostExecute(aVoid);
              dialog.dismiss();
              listAdapter = new ExpandableListAdapter(ProductsCategory.this, listDataHeader, listDataChild);
              // setting list adapter
              expListView.setAdapter(listAdapter);
  
          }
      }
  </code></pre>
  
  <p>My <strong>ExpandableListAdapter</strong>:-</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_filter, 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_filter, 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>
  
  <p>I want to know which button is checkbox is checked and call a userdefine methods.One more thing when i check a checkbox and collasped group and then again expanded the group the position of checkbox is change.</p>
  
  <p>I give snapshot of both position:-</p>
  
  <p><a href="https://i.stack.imgur.com/DtmKL.png" rel="noreferrer"><img src="https://i.stack.imgur.com/DtmKL.png" alt="enter image description here"></a></p>
  
  <p>when i collasped and again expanded check box position is change.</p>
  
  <p><a href="https://i.stack.imgur.com/EVfBP.png" rel="noreferrer"><img src="https://i.stack.imgur.com/EVfBP.png" alt="enter image description here"></a></p>