我有一个ExpandableListView可以正常工作,只有一个例外。

ExpandableListView的工作方式类似于我加载组(带有尺寸标注文本)和子项(带有我的对象文本),并在内部处理它们。如果选择了一个孩子,我会被打电话。但不要介于两者之间。

我从不更新它,而是执行this.recreate();。当数据更改时,ExpandableListView始终具有相同的数据。创建后被回调时,我只需按位置加载一次(带有我的DimensionItems文本),即可创建textView并在其上设置文本。

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.drawer_right_second, null);
            TextView text = (TextView) convertView.findViewById(R.id.eventsListEventRowText);
            text.setText(DimensionItems[groupPosition].title);
            if( Commands.AccountingObject.getObjectTotals(Commands.AccountingDimension.getDimensionByPositions(groupPosition))==0)
                convertView.setBackgroundColor(Color.DKGRAY);
        }
        return convertView;
    }


问题症状

如果我选择并扩大一个分组项目(将手指放在该分组项目上,以便可以看到孩子),则以下分组项目处于混乱状态。

我有八个分组项目0、1、2、3、4、5、6、7

如果我将第3组带两个孩子展开,我将得到一个0、1、2、3,c1,c2、6、7、5、4的实数列表?

在扩展阶段,我的代码中没有交互的地方,全部都在我代码外部的ExpandableListView.Java内部,并且调试器拒绝在其中放置断点。确实很难跟踪,并且在不受干扰的情况下,没有可以在代码中放置断点的入口点。

我需要做些什么吗,还是ExpandableListView库中的错误?

最佳答案

这是代码示例中的重写问题Bug

在经过长时间的学习后,对ExpandableListViews有了很多了解,但没有任何帮助,但最终它们还是像往常一样是一个简单的可怕错误,出现在我的鼻子前。发生重写问题,方括号内的某些代码应放在外部(每次运行)。我有点不好意思。

它应该看起来像这样,不需要id,只需要位置。

@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
    if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.drawer_right_second, null);
    }
    TextView text = (TextView) convertView.findViewById(R.id.eventsListEventRowText);
    text.setText(DimensionItems[groupPosition].title);
    if( Commands.AccountingObject.getObjectTotals(Commands.AccountingDimension.getDimensionByPositions(groupPosition))==0)
        convertView.setBackgroundColor(Color.DKGRAY);
    else
        convertView.setBackgroundColor(Color.BLUE);
    return convertView;
}

10-07 19:36
查看更多