android– 使用notifyDataSetChanged()更新ExpandableListView

android– 使用notifyDataSetChanged()更新ExpandableListView,第1张

概述首先简要概述一下我的代码,我希望它是可以理解的:>我有一个名为ToDoElement的类,其中包含一些变量.>我有另一个名为ToDoListe的类,它管理ArrayList中的ToDoElements.>ToDoListe包含deleteElement()方法,用于从ArrayList中删除ToDoElement>在我的主要活动liste_activity中,我创建

首先简要概述一下我的代码,我希望它是可以理解的:

>我有一个名为TodoElement的类,其中包含一些变量.
>我有另一个名为TodoListe的类,它管理ArrayList中的TodoElements.
> TodoListe包含deleteElement()方法,用于从ArrayList中删除TodoElement
>在我的主要活动Liste_activity中,我创建了一个TodoListe对象,并用TodoElement的一些对象填充它.
>在同一个活动中,我有一个带有我自己的适配器名为explistadapter的ExpandableListVIEw.
>适配器通过获取TodoElements的String变量来创建GroupvIEws和ChildvIEws.
>我为列表中的每个Group项创建了一个ContextMenu,其中我使用deleteElement()方法.

好的,现在这是我的问题:
我使用方法deleteElement()之后我想更新我的List,因为TodoListe中的ArrayList数据发生了变化.所以我调用explistadapter.notifyDataSetChanged().但随后我的整个活动崩溃,原因是:“IndexOutOfBoundException:索引4无效,大小为4”(我的列表中有5个TodoELement项目,在删除其中一个之前).我知道这是因为我的一个for循环,但我不知道为什么.

代码片段:

创建TodoListe的新对象:

private static TodoListe Liste = new TodoListe();

class TodoListe(只是重要的方法):

public class TodoListe {     private ArrayList<TodoElement> TodoListe;     public TodoListe()     {         TodoListe = new ArrayList<TodoElement>();     }     public voID newElement(TodoElement element){         TodoListe.add(element);     }     public voID deleteElement(int nummer) {         TodoListe.remove(nummer);     }     public int AnzahlElemente() {         return  TodoListe.size();     }}

定义列表适配器:

explistadapter = new Mylistadapter(this, createGroupList(), createChildList());setlistadapter( explistadapter );

为列表适配器创建ArrayLists:

// creates the List with the group itemsprivate List createGroupList() {      ArrayList result = new ArrayList();      for (int i=0; i < Liste.AnzahlElemente(); i++) {        result.add(Liste.getElement(i).getUeberschrift());      }      return result;    }// creates the List with the child itemsprivate List createChildList() {        ArrayList result = new ArrayList();        for(int i=0; i < Liste.AnzahlElemente(); i++) {            ArrayList secList = new ArrayList();            for( int n = 1 ; n <= 3 ; n++ ) {                if (Liste.getElement(i).getStichpunkt(n).length() != 0){                    secList.add( "- " + Liste.getElement(i).getStichpunkt(n));                }            }            result.add( secList );        }        return result;}

我自己的List Adapter(只是重要的方法):

public class Mylistadapter extends Baseexpandablelistadapter{private ArrayList<String> ueberschriften;private ArrayList<ArrayList<String>> stichpunkte;private LayoutInflater inflater;public Mylistadapter(Context context, List _ueberschriften, List _stichpunkte) {         this.ueberschriften = (ArrayList)_ueberschriften;        this.stichpunkte = (ArrayList)_stichpunkte;        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);        }public VIEw getChildVIEw(int groupposition, int childposition, boolean isLastChild, VIEw convertVIEw, VIEwGroup parent) {        if (convertVIEw == null) {            convertVIEw = inflater.inflate(R.layout.item_child, null);        }        TextVIEw tv = (TextVIEw) convertVIEw.findVIEwByID(R.ID.item_child_Title);        tv.setText(Liste_activity.getListe().getElement(groupposition).getStichpunkt(childposition));        return convertVIEw;    }public VIEw getGroupVIEw(int groupposition, boolean isExpanded, VIEw convertVIEw, VIEwGroup parent) {    if (convertVIEw == null) {        convertVIEw = inflater.inflate(R.layout.item_group, null);    }    TextVIEw tv = (TextVIEw)convertVIEw.findVIEwByID(R.ID.item_group_Title);    tv.setText(Liste_activity.getListe().getElement(groupposition).getUeberschrift());    return convertVIEw;}

使用notifyDataSetChanged():

Liste.deleteElement(groupPos);explistadapter.notifyDataSetChanged();

非常感谢您的关注!!

解决方法:

您需要将某种类型的DeleteMethod添加到适配器并手动从适配器中删除该项目,而不仅仅是从列表中删除它.

每次使用notifyDataSetChanged()刷新视图时,Adapter都会调用List周围的循环.由于您所做的更改,适配器中的列表将获得空值.

总结

以上是内存溢出为你收集整理的android – 使用notifyDataSetChanged()更新ExpandableListView全部内容,希望文章能够帮你解决android – 使用notifyDataSetChanged()更新ExpandableListView所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1099560.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存