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

前端 未结 1 1116
耶瑟儿~
耶瑟儿~ 2020-12-06 14:43

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 und

相关标签:
1条回答
  • 2020-12-06 15:29

    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();
    
    0 讨论(0)
提交回复
热议问题