Search code examples
androidandroid-studioexpandablelistviewandroid-switch

Android Studio adding "Switch" to child group of ExpandableListView


I made expandablelistview with textView and switch in the child group. I want to use the status of switch(On or OFF) to control the device connected to the ESP8266 WiFi module. How can I store the switch data to use it somewhere else?

Adapter java file:

public class AdpMain extends BaseExpandableListAdapter {
    private Context context;
    private ArrayList<String> arrayGroup;
    private HashMap<String, ArrayList<String>> arrayChild;

    public AdpMain(Context context, ArrayList<String> arrayGroup, HashMap<String, ArrayList<String>> arrayChild) 
    {
        super();
        this.context = context;
        this.arrayGroup = arrayGroup;
        this.arrayChild = arrayChild;
    }

    ...

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) 
    {
        String childName = arrayChild.get(arrayGroup.get(groupPosition)).get(childPosition);
        View v = convertView;

        if(v == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = (RelativeLayout)inflater.inflate(R.layout.activity_listview_child, null);
    }
        TextView textChild = (TextView)v.findViewById(R.id.textChild);
        textChild.setText(childName);

        return v;
    }

}

enter image description here


Solution

  • You have to first register switch id in getChildView() from your activity_listview_child xml file. suppose your switch id in xml file is switchChild then use following code :

         @Override
                    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) 
                    {
            ChildHolder childHolder;
                        String childName = arrayChild.get(arrayGroup.get(groupPosition)).get(childPosition);
    
                        if(convertView == null) 
            {
                            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                            convertView = inflater.inflate(R.layout.activity_listview_child, null);
                    childHolder = new ChildHolder();
                        childHolder.textChild = (TextView)convertCiew..findViewById(R.id.textChild);
            childHolder.switchChild = (Switch)convertCiew..findViewById(R.id.switchChild);
    
            converView.setTag(childHolder)
                }
            else
            {
            childHolder = (ChildHolder)convertView.getTag();
            }
            childHolder.textChild.setText(childName);
        childHolder.switchChild.setOnClickListener(new View.OnClickListener() {
    
                            @Override
                            public void onClick(View view) 
                            {
                                //whatever you want do for switch code here
    mListener.OnSwitchClick(groupPosition, childPosition,childHolder.switchChild.isChecked());
                            }
                        });
                        return convertView;
                    }
    
            private static class ChildHolder
            {
            TextView textChild;
            Switch switchChild;
            }
    

    hope it helps you