1

我正在编写一个 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

}

如果有人可以对可能发生的事情有所了解,将不胜感激。

4

3 回答 3

8

如果您使用 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
}

这工作正常

于 2013-09-16T21:46:32.923 回答
0

您实际上并没有说您的适配器是什么类,这可能会有所帮助。但如果它是一个 android.widget.ArrayAdapter 那么它有两种构造函数——使用对象数组或对象列表。

现在,如果底层列表支持删除,您将只被允许从适配器中删除对象。正如您可能知道的那样,Java 中的数组是固定长度的(您不能添加或删除元素,只能更改其值)。如果我没记错的话,ArrayAdapter 在内部将您提供的数组包装在一个不可变列表中。

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

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

于 2013-09-16T22:02:12.047 回答
0

试试这个代码...在适配器项目或 btn 点击

`holder.cancel_btn_img.setOnClickListener(v -> {
        qualificationData.remove(position);
        notifyDataSetChanged();
    });` 
于 2021-08-04T15:36:47.017 回答