我是 android 新手,我想实现如下图所示的 ListView 。似乎expandableListView 可以满足我的要求,但我想要的是只有Item 4
孩子并且可以展开,“项目1”只是用户可以点击的选项,不能展开。我阅读了 Expandable List View 的文档,并不清楚如何实现这一点。任何人都可以就实施这个提出一些建议吗?太感谢了
问问题
2744 次
3 回答
1
但我想要的是只有第 4 项有孩子并且可以扩展
如果 Item 没有子项,则不会扩展。你可以像这样想象:
public class Item {
private String title;
private List<Option> children; // if size = 0 won't be expanded
}
这是本机行为,ExpandableListView
因此,如果任何 Item 没有子项,则隐式不会扩展,但您需要为组 (Items) 和子项 (Options) 设置 OnClickListener:
public boolean onChildClick(ExpandableListView parent, View row,
int groupPosition, int childPosition, long id) {
// callback method after click for Options
return false;
}
public boolean onGroupClick(ExpandableListView parent, View row,
int groupPosition, long id) {
/** if you are using BaseAdapter subclass implementation **/
adapter.getGroup(groupPosition)).getChildren() == null) {
// item doesn't have children
}
else {
// has children
}
通常,如果您想更好地控制您的 ListView,我非常建议您在您的情况下实现自己的 ListAdapter 子类,您可以使用BaseExpandableListAdapter。
列表的外观只是关于正确样式布局的问题,例如删除组指示器
android:groupIndicator="@null"
更新:
@Roberto Lombardini 提到的问题:
这个解决方案的一个小问题是,即使组没有孩子,也会出现指示组视图状态(扩展与否)的灰色小三角形。我错了吗?
如果您只想为带有子项的项目设置灰色三角形,则需要在您的自定义适配器中修复它getGroupView()
:
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
// inflating View etc.
Item item = items.get(groupPosition);
if (item != null) {
// if Item has children
if (item.getChildren() != null && !item.getChildren().isEmpty()) {
// set children indicator to VISIBLE
imageView.setVisibility(ImageView.VISIBLE);
}
// if Item doesn't have children
else {
// set children indicator to GONE
imageView.setVisibility(ImageView.GONE);
}
}
}
于 2013-09-13T07:26:45.443 回答
0
尝试实现一些自定义适配器,我认为可能是做你需要的更好的方法
于 2013-09-13T07:27:57.417 回答
0
lv.setOnGroupClickListener(new OnGroupClickListener() {
public boolean onGroupClick(ExpandableListView parent, View v, int position, long id) {
switch (position) {
case 0: return true;
case 2: return true; // returning true wont expand
default:
return false;// if you return false then only that position will be expanded
}
}
}
);
只需在要扩展的父位置和不想扩展的父位置上返回 false 即可返回 true。
于 2014-12-24T09:45:37.787 回答