gpt4 book ai didi

android - expandableList 中空组的备用 View

转载 作者:行者123 更新时间:2023-11-29 01:46:06 25 4
gpt4 key购买 nike

问题很简单,但我做不出来。我有一个带有 3 个标题的可扩展列表,它们可以是填充的也可以是空的。

我希望在您展开一个空的组时显示一个简单的 TextView ,我已经找了一段时间但似乎没有任何效果。我不能使用 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 个 child 的组会发生什么,它会被视为空组吗? ?

编辑:

好吧,我解决了这个问题,方法是始终在我的子列表中的第一个位置放置一个空对象,然后当 getchildrencount 返回 1 时,我知道它实际上是空的,所以我调用 switch 的空情况。在 switch 的填充情况下,我总是隐藏第一个元素,这可能不是最干净的方法,但这是有效的。

最佳答案

如果您使用不同的布局,无论它们是填充的还是空的,您都可以像这样通过覆盖 getChildTypegetGroupType 来区分

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;
}

关于android - expandableList 中空组的备用 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21394733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com