Search code examples
androidparent-childexpandablelistview

How do I add child items dynamically to an expandable listview.?


For example, I have an edit text and a button. When the button is pressed the text is added to the first group in my expandable listview and each following item is added underneath it. Thank you. (If you need the code I have so far please request.)


Solution

  • first one you should create your own custom adapter. once create a class like this.

    public class ExpandableListParentClass{
    
        private Object parent;
        private ArrayList<Object> parentChildren;
    
    
        public ExpandableListParentClass() {
        }
        public ExpandableListParentClass(Object parent, ArrayList<Object> parentChildren) {
            this.parent = parent;
            this.parentChildren = parentChildren;
        }
    
        public Object getParent() {
            return parent;
        }
    
        public void setParent(Object parent) {
            this.parent = parent;
        }
    
        public ArrayList<Object> getParentChildren() {
            return parentChildren;
        }
    
        public void setParentChildren(ArrayList<Object> parentChildren) {
            this.parentChildren = parentChildren;
        }
    }
    

    and create your adapter

    public class ExpandableListAdapter extends BaseExpandableListAdapter implements Filterable{
    
        private LayoutInflater inflater;
        private ArrayList<ExpandableListParentClass<Object>> mParent;
        private View view;
    
    
        public ArrayList<Object> getMParent() {
            return mParent;
        }
    
    
    
        public ExpandableListAdapter(Context context,
             ArrayList<ExpandableListParentClass<Object>> parentList ) {
            this.mParent = parentList;
            this.inflater = LayoutInflater.from(context);
    
        }
    
        // counts the number of group/parent items so the list knows how many
        // times calls getGroupView() method
        public int getGroupCount() {
            return mParent.size();
        }
    
        // counts the number of children items so the list knows how many times
        // calls getChildView() method
        public int getChildrenCount(int parentPosition) {
            int size =0;
            if(mParent.get(parentPosition).getParentChildren() != null){
            size = mParent.get(parentPosition).getParentChildren().size();
            }
            return size;
        }
    
        // gets the title of each parent/group
        public Object getGroup(int i) {
            return mParent.get(i).getParent();
        }
    
        // gets the name of each item
        public Object getChild(int parentPosition, int childPosition) {
            return mParent.get(parentPosition).getParentChildren().get(childPosition);
        }
    
        public long getGroupId(int parentPosition) {
            return parentPosition;
        }
    
        public long getChildId(int i, int childPosition) {
            return childPosition;
        }
    
        public boolean hasStableIds() {
            return true;
        }
    
        // in this method you must set the text to see the parent/group on the list
    
        public View getGroupView(int parentPosition, boolean b, View view, ViewGroup viewGroup) {
            if (view == null) {
                view = inflater.inflate(R.layout.layout_listview, viewGroup, false);
            }
    
            return view;
    
        }
    
        // in this method you must set the text to see the children on the list
    
        public View getChildView(int parentPosition, int childPosition, boolean b, View view, ViewGroup viewGroup) {
            if (view == null) {
            view = inflater.inflate(R.layout.layout_listview, viewGroup, false);
            }
    
    
    
            // return the entire view
            return view;
        }
    
        public boolean isChildSelectable(int i, int i1) {
            return true;
        }
    
        }
    
    
    
     now fill to list
    
    
          List<ExpandableListParentClass> arrayParents = new ArrayList<ExpandableListParentClass>();
          ExpandableListParentClass item = new ExpandableListParentClass();
          item.setParent(yourParentItem);
          item.setParentChildren( yourChildList);
    

    after that when you need to add child

    ExpandableListView myExpList= (ExpandableListView) this.view.findViewById(R.id.yourExpListView);
    
    ExpandableListAdapter adapter = 
            (ExpandableListAdapter) myExpList.getExpandableListAdapter();
    
    ( (ExpandableListParentClass)adapter.getMParent().get(0) ).getParentChildren().add(object);
    //(change to get(0) which you parent want to get )
    adapter.notifyDataSetChanged();
    adapter.notifyDataSetInvalidated();