Android中的多级ExpandableListView

UnT*_*aDe 10 java android expandablelistview

我正在尝试从给定的未知大小和级别的类别列表创建类别树.所以我正在尝试创建一个可以包含2个以上级别的通用可扩展列表.一般的想法是在每个孩子的布局中添加另一个ExpandableListView.问题是第二级别不会打开,看起来它会覆盖孩子或其他东西.以下是结果的一些屏幕截图:

这是打开之前的样子在此输入图像描述

打开第一个选项后:(它应该是空的)

在此输入图像描述

现在打开第二个:(有4个孩子,其中一个孩子有自己的孩子)

在此输入图像描述

正如您所看到的那样,第三个选项在点击打开之后看起来已经呈现了另一个选项或其他内容:

在此输入图像描述

除了改变箭头的状态之外什么都不做.至少它试图打开它......

这是代码:

CatAdapter.java :(扩展BaseExpandableListAdapter) http://pastebin.com/6yUTkMbJ

Category.java: http://pastebin.com/E7yWwpna

catitem.xml:http://pastebin.com/G5MPT3Ua

用法:http: //pastebin.com/Wk0FqJhn

很抱歉这个问题很长,我试图尽可能清楚.

提前致谢!对不起,我的英语不好!

编辑:

我最终为这个任务制作了一个自定义视图,谢谢大家的答案!

Geo*_*its 7

我相信问题出在你的getChildView()方法中:

    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {

            convertView = inflater.inflate(R.layout.catitem, parent, false);
            TextView textView_catName = (TextView)convertView.findViewById(R.id.textView_catName);
            Category current = categories.get(groupPosition).childs.get(childPosition);
            textView_catName.setText(groupPosition + " , " + childPosition);

            if(current.childs.size() > 0 ) {
                    ExpandableListView elv = new ExpandableListView(context);
                    elv.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.WRAP_CONTENT,  AbsListView.LayoutParams.WRAP_CONTENT));
                    elv.setAdapter(new CatAdapter(context, current.childs));
                    ((ViewGroup)convertView).addView(elv);
            }

            return convertView;
    }
Run Code Online (Sandbox Code Playgroud)

当您遇到"可扩展"的孩子时,您仍然在膨胀R.layout.catitem并添加新的孩子elv.由于catitem是a RelativeLayout并且您没有为对齐添加任何参数,因此每个视图都放置在左上角,覆盖其他任何内容.

您可能希望尝试更改R.layout.catitem为垂直LinearLayout作为其根.这可以防止他们重叠孩子的头衔,但我不能保证孩子的孩子不会重叠.不过,这是一个简单的改变,值得一试.


另外,来自以下文档ExpandableListView:

注意:如果父级的大小也没有严格指定,则不能将值wrap_content用于XML中的ExpandableListView的android:layout_height属性(例如,如果父级是ScrollView,则无法指定wrap_content,因为它也可以是任意长度.但是,如果ExpandableListView父级具有特定大小(例如100像素),则可以使用wrap_content.

那说"在XML中",所以我不确定它是否意味着应用于代码.在我看来,他们使用相同的机制,所以它可能值得研究.我不确定你如何设置父母的最大尺寸.您可以测量一个项目的大小,并乘以子项数.您必须考虑边距/分隔符,因此可能并不简单.


如果这不起作用,您可能需要直接滚动自己的ViewGroup.从头开始实现它应该不会太难,只是不要忘记尝试利用视图回收(目前的方法不会这样做).