【发布时间】:2016-03-31 12:13:10
【问题描述】:
这是我的代码:
for (int i=0; i<mListOfItemsToDelete.size(); i++) {
receivedMessages.remove(mListOfItemsToDelete.get(i).intValue());
Log.e("position:", mListOfItemsToDelete.get(i).toString());
}
mListOfItemsToDelete.clear();
receivedMessages 包含我在 ListView 中使用的所有消息项 (MessagesModel)。
mListOfItemsToDelete 包含要从 receivedMessages 中删除的项目索引列表(例如 [4, 2, 1] - 始终排序和反转)。
而receivedMessages.remove(mListOfItemsToDelete.get(i).intValue()); 总是从ArrayList 的末尾删除元素(例如,如果我选择 2 个元素,它会从末尾删除 2 个元素)。这行代码让我抓狂——你知道什么可以帮助正确删除项目吗?
编辑: 在我的代码中输入后,我在日志中发现了一些非常奇怪的东西:
private void deleteSelectedMessages() {
Log.i("arrayIN_:", receivedMessages.toString());
for (int i=0; i<mListOfItemsToDelete.size(); i++) {
//TODO: receivedMessages.remove delete last elements, not selected...
receivedMessages.remove(Integer.parseInt(mListOfItemsToDelete.get(i).toString()));
Log.e("position:", mListOfItemsToDelete.get(i).toString());
Log.i("arrayFOR" + i + ":", receivedMessages.toString());
}
Log.i("arrayIN:", receivedMessages.toString());
mListOfItemsToDelete.clear();
}
还有我的日志(我选择索引为 1 和 2 的项目 - 我的 ArrayList 有 5 个元素,索引中为 0-4):
04-04 16:48:29.536 5829-5829/app.com.mmm I/arrayIN_::
[app.com.mmm.models.MessageModel@3ae1bbc,
app.com.mmm.models.MessageModel@cfd4745,
app.com.mmm.models.MessageModel@17ec8e9a,
app.com.mmm.models.MessageModel@2847d3cb,
app.com.mmm.models.MessageModel@231f37a8]
04-04 16:48:29.536 5829-5829/app.com.mmm E/position:: 2
04-04 16:48:29.536 5829-5829/app.com.mmm I/arrayFOR0::
[app.com.mmm.models.MessageModel@3ae1bbc,
app.com.mmm.models.MessageModel@cfd4745,
app.com.mmm.models.MessageModel@2847d3cb,
app.com.mmm.models.MessageModel@231f37a8]
04-04 16:48:29.536 5829-5829/app.com.mmm E/position:: 1
04-04 16:48:29.536 5829-5829/app.com.mmm I/arrayFOR1::
[app.com.mmm.models.MessageModel@3ae1bbc,
app.com.mmm.models.MessageModel@2847d3cb,
app.com.mmm.models.MessageModel@231f37a8]
04-04 16:48:29.536 5829-5829/app.com.mmm I/arrayIN::
[app.com.mmm.models.MessageModel@3ae1bbc,
app.com.mmm.models.MessageModel@2847d3cb,
app.com.mmm.models.MessageModel@231f37a8]
04-04 16:48:29.536 5829-5829/app.com.mmm I/arrayOUT::
[app.com.mmm.models.MessageModel@3ae1bbc,
app.com.mmm.models.MessageModel@2847d3cb,
app.com.mmm.models.MessageModel@231f37a8]
请注意,arrayOUT 位于我调用上述方法的位置下方...
它从ArrayList 中正确删除,但为什么我的ListView 总是删除最后一个元素?!
【问题讨论】:
-
receivedMessages.remove(0);总是删除第一个元素...你是在 for 循环中这样做吗? -
是的,我知道它应该删除第一个元素......但它总是删除最后一个元素 - 在调试模式下我看到了。如果我选择 3 个元素,它 (
receivedMessages.remove(0);) 会删除最后 3 个对象... -
我想从位置(索引)0 移除对象,例如它仍然从最后一个位置删除对象...
-
你应该告诉我们
receivedMessages的类型。另请注意,如果mListOfItemsToDelete不是按降序排列,则索引将在第一次删除后关闭。