从数组列表中删除总是最后一个元素

时间:2016-03-31 12:13:11

标签: java arraylist

这是我的代码:

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删除始终是最后一个元素?!

2 个答案:

答案 0 :(得分:0)

  

对我而言,这有效:

 ArrayList<String> some_data=new ArrayList<String>();
    ArrayList<Integer> indexes_to_delete=new ArrayList<Integer>();

 some_data.add("one");
        some_data.add("two");
        some_data.add("three");
        some_data.add("four");
        some_data.add("five");

        indexes_to_delete.add(4);
        indexes_to_delete.add(2);

        for(int i=0;i<indexes_to_delete.size();i++) {
            some_data.remove(indexes_to_delete.get(i).intValue());
        }
  

我的some_data现在包含&#34;一个&#34;,&#34;两个&#34;和&#34;四&#34;

答案 1 :(得分:-2)

试试这个: receivedMessages.remove(mListOfItemsToDelete [I]);