问题很简单,但我无法使其发挥作用。 我有一个带有3个标题的可扩展列表,它们可以填充或为空。
我希望在展开一个空的组时显示一个简单的文本视图,我一直在寻找一段时间,但似乎没有任何工作。 我不能使用setEmpty(),因为这只有在所有组都为空时才有效。
我在这里找到了一个类似的帖子:ExpandableListView - empty group message
如果我尝试按建议的答案建议,那么:
@Override
public int getChildrenCount(int groupPosition) {
if(this._listDataChild.get(this._listDataHeader.get(groupPosition))
.size() != 0){
return this._listDataChild.get(this._listDataHeader.get(groupPosition))
.size();
}
return 1;
}
当我尝试扩展空组时,我收到错误...我认为这无论如何都不会起作用,例如如果我有一个有1个孩子的小组将会发生什么,它会被认为是空的吗? ?
编辑:
好的我通过总是在mys子列表的第一个位置有一个空对象来解决这个问题,然后当getchildrencount返回1时,我知道它实际上是空的,所以我调用了交换机的空盒子。 在交换机的填充情况下,我总是隐藏第一个元素,这可能不是最干净的方法,但这可行。
答案 0 :(得分:1)
如果您使用不同的布局,无论它们是填充还是空白,您都可以通过覆盖getChildType
或getGroupType
来区分
private static final int CHILD_TYPE_COUNT = 2;
@Override
public int getChildType(int groupPosition, int childPosition) {
if(obj.isEmpty())
return 0;
else if(obj.isPopulated)
return 1;
}
@Override
public int getChildTypeCount() {
return CHILD_TYPE_COUNT;
}
然后您可以使用相应的布局来填充。我建议你也使用ViewHolder-Pattern
static class PopulatedViewHolder {
//declare the elements of a populated view here
}
static class EmptyViewHolder {
//declare the elements of an empty view here
}
@Override
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild,
View convertView, ViewGroup parent) {
EmptyViewHolder emptyViewHolder = null;
PopulatedViewHolder populatedViewHolder = null;
//check if the type of your view is populated or empty and use the corresponding layout
int type = getChildType(groupPosition, childPosition);
if (convertView == null || (type == 0 && (convertView.getTag()) instanceof PopulatedViewHolder) || (type == 1 && (convertView.getTag()) instanceof EmptyViewHolder)) {
LayoutInflater inflater = (LayoutInflater)context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
switch(type){
case 0:
//type is empty
emptyViewHolder = new EmptyViewHolder();
convertView = inflater.inflate(R.layout.empty_layout,
parent, false);
//...initialize your viewcomponents of the populated layout here...
convertView.setTag(emptyViewHolder);
break;
case 1:
//populated
populatedViewHolder = new PopulatedViewHolder();
convertView = inflater.inflate(
R.layout.populated_layout, parent, false);
//...initialize your viewcomponents of the populated layout here...
convertView.setTag(populatedViewHolder);
break;
}
}
else {
switch (type) {
case 0:
emptyViewHolder = (EmptyViewHolder)convertView.getTag();
break;
case 1:
PopulatedViewHolder = (PopulatedViewHolder)convertView.getTag();
break;
}
}
switch(type){
case 0:
//empty
//set the values of your empty view here
break;
case 1:
//populated
//set the values of your populated view here
break;
}
return convertView;
}
答案 1 :(得分:0)
如果要扩展BaseExpandableListAdapter,可以更改BaseExpandableListAdapter的getGroupView,以根据子项是否为空来返回不同位置的不同视图
public override查看GetGroupView(int groupPosition,bool isExpanded,View convertView,ViewGroup parent) { //第二个孩子的空数据和第二个孩子的视图 if(position == 1&& _childData.getCount(1)== 0) { //返回新的TextView,你可以创建一个成员变量textview,并返回它 } }