如何动态地将子项添加到可展开的列表视图中。

时间:2013-03-11 20:55:04

标签: android parent-child expandablelistview

例如,我有一个编辑文本和一个按钮。按下按钮时,文本将添加到我的可扩展列表视图中的第一个组中,并在其下方添加每个后续项目。谢谢。 (如果您需要我到目前为止的代码,请索取。)

1 个答案:

答案 0 :(得分:6)

首先应该创建自己的自定义适配器。 一旦创建了这样的类。

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;
    }
}

并创建适配器

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);

之后你需要添加孩子

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();