我是android的新手,我想实现像下面的图像一样的ListView。似乎expandableListView可能符合我的要求,但我想要的只是Item 4
有孩子并且可以扩展,'Item 1'只是一个用户可以点击的选项,并且无法展开。我阅读了可扩展列表视图的文档,并不清楚如何实现它。有人可以提出一些实施这个建议吗?非常感谢你
答案 0 :(得分:1)
但我想要的只是第4项有孩子,可以扩展
如果物品没有孩子,则不会被遗弃。您可以像这样形象:
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。
List的外观只是关于正确样式布局的问题,例如用
删除组指示符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);
}
}
}
答案 1 :(得分:0)
尝试实现一些自定义适配器,我认为可能是更好的方式来做你需要的
答案 2 :(得分: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。