【问题标题】:Android ListView still contains one item after removing everything删除所有内容后,Android ListView 仍包含一项
【发布时间】:2018-11-08 09:53:26
【问题描述】:

我在 Android 中有一个包含订单的 ListView。当您单击特定订单时,您可以选择是否删除它。当列表包含 >1 个项目时,已删除的项目不再出现在 ListView 上。但是,当列表大小为 1 并且您删除了剩下的唯一订单时,该订单确实会从列表中删除,但不会从 ListView 中删除。所以您仍然可以在屏幕上看到它,但如果您尝试打开它,则会显示错误消息“无法打开此订单。”。

当您返回主屏幕并重新打开 ListView 时,订单被正确删除,并显示一个空列表。但是,我不确定为什么会这样。下面是一些示例代码:

method {
    VerkoopOrder orderToBeSaved = CurrentOrder;
    UUID CurrentID = CurrentOrder.getId();
    orderToBeSaved.setId(null);
    String Result = OrderHelper.SaveOrder(orderToBeSaved, APIKey);
    JSONObject json = new JSONObject(Result);
    String res = json.getString("nummer");
    if (Result != null) {
        Messager.showMessage(getString(R.string.Saved), getString(R.string.OrderSavedAs) + " " + res, true, this);
        DeleteCurrentOrder(APIKey, CurrentID);
        UnsavedOrdersActivity.UnsavedOrderAdapter.notifyDataSetChanged();
    }
}

public void DeleteCurrentOrder(String APIKey, UUID OrderId) {
    try {
        OrderScanPreference orderScanPreference = OrderScanPreference.GetCurrentSavedPreference(this, getString(R.string.OrderScanUserPreference));
        String finalAPIKey = APIKey;
        try {
            for (UnsavedOrderPreference unsavedOrderPreference : orderScanPreference.unsavedOrderPreferences) {
                if (unsavedOrderPreference.APIAdministrationToken.equals(finalAPIKey)) {
                    unsavedOrderPreference.UnsavedOrders.removeIf(r -> r.getId().equals(OrderId)); //Order gets removed from the list!
                }
            }
            orderScanPreference.Save(this, getString(R.string.OrderScanUserPreference));
        } catch (Throwable throwable) {
            //TODO
        }
    } catch (Exception ex) {
        Log.d("Exception: ", ex.toString());
        //TODO
    }
}

这段代码是一位同事写的,但他几周前离开了公司,所以我必须完成他的项目。如果您需要更多信息,请告诉我。

【问题讨论】:

  • 您应该避免 try catch 块而不记录错误(如果有)。您确定最后一个订单已从 UnsavedOrders 中正确删除,并且之后会调用 notifyDataSetChanged() 吗?
  • 是的,我用断点单步执行了代码,并确保两种方法都达到了。

标签: java android list listview


【解决方案1】:

我检查了列表是否为空。如果是,它将适配器重新分配给 ListView,以便完全清除列表。

不是一个很好的解决方法,所以我不会接受这个作为答案。只有很快没有更好的答案我才会接受。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    相关资源
    最近更新 更多