如何从列表<>中删除项目?

时间:2019-03-17 15:55:18

标签: java android list arraylist

我正在开发一个应用程序,其中包含票证列表,为用户提供了添加票证和删除票证选项。添加选项可以正常工作,但是删除选项却不能,这是故障单列表代码

public class TicketList {

    private List<Ticket> ticketList;

    public TicketList() {
        ticketList = new ArrayList<>();
    }

    public List<Ticket> getTicketList() {
        return ticketList;
    }

    public void setTicketList(List<Ticket> ticketList) {
        this.ticketList = ticketList;
    }

    public void addTicketToList(Ticket ticket) {
        ticketList.add(ticket);
    }

    public void removeFromList(Ticket ticket) {
        ticketList.remove(ticket);
    }

    @Override
    public String toString() {
        return "TicketList{" + "ticketList=" + ticketList + '}';
    }
}

在另一个活动中的删除功能不起作用:

private void deleteTicket() {
    TicketList ticketList = MyPreferencesManager.getInstance(this).getTicketList();
    Ticket ticket = MyPreferencesManager.getInstance(this).getTicket();
    ticketList.removeFromList(ticket);
    MyPreferencesManager.getInstance(this).putTicketList(ticketList);
}

虽然add函数可以正常工作:

private void saveTicket() {
    TicketList ticketList = MyPreferencesManager.getInstance(this).getTicketList();
    Ticket ticket = new Ticket();
    ticket.setUsername(username.getText().toString());
    ticket.setPassword(password.getText().toString());
    ticketList.addTicketToList(ticket);
    MyPreferencesManager.getInstance(this).putTicketList(ticketList);
}

谁能告诉我删除或删除功能出了什么问题?

1 个答案:

答案 0 :(得分:1)

这是因为当您使用以下代码时:

ticketList.remove(ticket);

删除方法将在删除之前检查列表中是否有确切的对象项。因此,在尝试从列表中删除票证对象之前,可能已经对其进行了更改。

您可以从List documentation中查看详细信息:

  

公共抽象布尔值删除(对象o)

     

从此列表中删除第一次出现的指定元素,   如果存在(可选操作)。如果此列表不包含   元素,它保持不变。更正式地说,用   最低索引i使得(o == null?get(i)== null:   o.equals(get(i)))(如果存在这样的元素)。如果此返回true   列表包含指定的元素(或者等效地,如果此列表   因通话而更改)。

您可能需要的是List.remove(int index)