如何从Android ListActivity中的适配器中删除项目

我正在编写一个Android应用程序,需要从listActivity中的足球游戏名单中动态删除玩家。 Activity有一个适配器,它链接到一个描述每个玩家的字符串数组。 然后我点击时尝试从列表中删除一个播放器。 我的问题是每当我使用内置方法的适配器删除我不断收到此错误。

FATAL EXCEPTION: main java.lang.UnsupportedOperationException at java.util.AbstractList.remove(AbstractList.java:638); 

据我所知,我没有权利从适配器中删除项目,但我不明白为什么,因为我在网上找到的每个例子似乎都没有问题。 这是我用来尝试从适配器中删除单个项目的代码。

  public void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); adapter.remove(adapter.getItem(position)); adapter.notifyDataSetChanged(); //Updates adapter to new changes } 

这是我尝试更改适配器的数据源并通知它更改希望它将更新屏幕列表的代码。

  public void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); mainRoster.removePlayer(position); //removes from custom roster stringedRoster = mainRoster.getStringArray(); //Resets string array adapter.notifyDataSetChanged(); //Updates adapter to new changes } 

如果有人能够对可能发生的事情发表一些看法,那将非常感激。

如果您使用List来存储您的Object并通过适配器将它们显示在ListVeiw中,您将使用:

  public void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); list.remove(position); adapter.notifyDataSetChanged(); //Updates adapter to new changes } 

这很好用

你还没有真正说过你的适配器是什么类,这可能会有所帮助。 但如果它是一个android.widget.ArrayAdapter,那么它有两种构造函数 – 使用对象数组或对象列表。

现在,如果基础列表支持删除,则只允许从适配器中删除对象。 您可能知道,Java中的数组具有固定长度(您不能添加或删除元素,只能更改其值)。 如果我没记错的话,ArrayAdapter会在内部包装你在不可变列表中提供的数组。

解决方案:向ArrayAdapter构造函数提供List而不是Array,并确保该列表是可变的(例如,您可以使用ArrayList或其他支持.remove()的实现)。

如果它是你正在使用的另一个适配器子类,那么很难讨论它的实现细节以及为什么它不会删除元素,如果我们不知道它是什么以及它是如何工作的。