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

Posted

技术标签:

【中文标题】如何将子项动态添加到可展开的列表视图中。?【英文标题】:How do I add child items dynamically to an expandable listview.? 【发布时间】:2013-02-27 05:01:49 【问题描述】:

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

【问题讨论】:

我被困在这里。你能分享你的代码吗? 【参考方案1】:

第一个您应该创建自己的自定义适配器。 一旦创建一个这样的类。

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

【讨论】:

向列表添加新字符串时,这段代码会立即更新列表吗? 虽然我没有完全使用您的解决方案,但您为我指明了正确的方向

以上是关于如何将子项动态添加到可展开的列表视图中。?的主要内容,如果未能解决你的问题,请参考以下文章

在 Vue 中动态地将元素添加到可排序的 LI

动态列表视图打开一个动态列表视图

在Android中动态添加子项到ListView

将复选框动态添加到列表视图

可扩展的列表视图子项动态计数

如何在列表视图中动态添加或删除编辑文本