一般的想法是添加到在其布局中有另一个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
对于长期的问题,我很想尽可能的清楚.
提前致谢!对不起,我的英语不好!
编辑:
我结束了为此任务定制视图,感谢大家的答案!
解决方法
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; }
当你遇到一个’可扩展’的孩子,你仍然充斥着R.layout.catitem并添加你的新的elv.由于catitem是RelativeLayout,并且您不添加任何对齐参数,每个视图都放置在左上角,覆盖任何其他位置.
您可能想尝试更改R.layout.catitem以将一个垂直的LinearLayout作为其根.这样做可以防止孩子的头衔重叠,但我不能保证孩子的孩子不会重叠.这是一个容易的变化,但值得一试.
另外,从ExpandableListView
的文档:
Note: You cannot use the value wrap_content for the android:layout_height attribute of a ExpandableListView in XML if the parent’s size is also not strictly specified (for example,if the parent were ScrollView you could not specify wrap_content since it also can be any length. However,you can use wrap_content if the ExpandableListView parent has a specific size,such as 100 pixels.
那就是说“在XML中”,所以我不知道是否适用于代码.在我看来,他们会使用相同的机制,所以可能值得研究.我不知道如何设置父级的最大大小.您可以测量一个项目的大小,并乘以孩子数量.您必须考虑利润/分隔,所以可能并不简单.
如果这不行,您可能需要直接滚动您自己的ViewGroup.不要太难以从头开始实施,只是不要忘记尝试利用视图回收(您当前的方法不会做).