【问题标题】:Expanpandable ListView Crashes when deleting last Child in group is expanded展开删除组中的最后一个子项时,可扩展的 ListView 崩溃
【发布时间】:2014-03-05 14:09:31
【问题描述】:

我从可展开列表视图的组中删除子项时遇到问题。问题是当我的组被扩展并且我删除子“getChildView”时被调用 在我的 ListView 适配器上执行“notifyDataSetChanged”。我正在访问一个大小现在为零的数组并得到一个 Out Of Bounds 异常。我假设可扩展列表视图会自动删除视图,因为“getChildrenCount”返回 0。如果组折叠,则不会出现此问题。列表从不显示子视图,因为没有更多子视图。

我的问题是如何在可展开的 ListView 中删除展开组中的最后一个子项

这是我的代码示例。了解条件是组已展开,我已删除所有子项,此函数仍在调用中。

    // This Function used to inflate child rows view
    @Override
    public View getChildView(
        int groupPosition,
        int childPosition,
        boolean isLastChild, 
        View convertView,
        ViewGroup parentView)
    {
        Trade t = objArray[groupPosition];

        View childView = convertView;
        if( childView == null )
        {
            LayoutInflater inflater = LayoutInflater.from(client);
            childView = inflater.inflate(R.layout.item_textview, parentView, false);
            ChildViewHolder childViewHolder = new ChildViewHolder();

            childViewHolder.itemTextView = (TextView)childView.findViewById(R.id.itemTextView);
            childView.setTag(childViewHolder);
        }

        ChildViewHolder childViewHolder = (ChildViewHolder)childView.getTag();

        childViewHolder.itemTextView.setText("Term: " + t.getTradeTerms().get(childPosition));
        return childView;
    }

    @Override
    public int getChildrenCount(int groupPosition)
    {
        return objArray[groupPosition].getTradeTerms().size();
    }

【问题讨论】:

    标签: android listview android-listview expandablelistview


    【解决方案1】:

    请看下面的代码,我希望这对你很有帮助。

    HashMap<String, List<String>> listDataChild;
     List<String> listDataHeader;
    
    // Listview on child click listener
        expListView.setOnChildClickListener(new OnChildClickListener() {
    
            @Override
            public boolean onChildClick(ExpandableListView parent, View v,
                    int groupPosition, int childPosition, long id) {
                // TODO Auto-generated method stub
    
              listDataChild.get(listDataHeader.get(groupPosition)).remove(childPosition);
               adapter.notifyDataSetChanged();
    
                return false;
            }
        });
    

    【讨论】:

    • 不,这无济于事。我通过传递给适配器的列表从另一个窗口中删除数据。我调用了导致 Exp 的 adapter.notifyDataSetChanged()。列表视图重新配置。试试这个实验。删除扩展组中的子项。您的 getChildView 将接到电话。当子数据已经被删除时,你如何处理这个事件。
    • 如果您从另一个活动中删除数据,请使用公共数组列表并在使用后使用 adatpter.notifyDataSetChaged();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 2019-05-21
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多