2015-01-23 2 views
0

У меня есть класс Singleton под названием User, у этого пользователя есть ArrayList. теперь у меня есть ListView, который отображает элементы пользователя, выбирая их, а затем нажмите кнопку, чтобы удалить выбранные; в этом случае:удаление элементов из ArrayList

view.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); 
    view.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() { 

     ArrayList<Chat> elementsToErase= new ArrayList<Chat>(); 
     @Override 
     public void onItemCheckedStateChanged(ActionMode actionMode, int i, long l, boolean b) { 



      if(b) { 
       elementsToErase.add((Chat)view.getItemAtPosition(i)); 


      } 
       else{ 
        elementsToErase.remove((Chat)view.getItemAtPosition(i)); 

      } 




     } 

     @Override 
     public boolean onCreateActionMode(ActionMode actionMode, Menu menu) { 
      MenuInflater inflater = actionMode.getMenuInflater(); 
      inflater.inflate(R.menu.menu_chat_edit, menu); 
      view.setSelected(true); 
      return true; 
     } 

     @Override 
     public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) { 
      return false; 
     } 

     @Override 
     public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) { 
      switch (menuItem.getItemId()) { 
      case R.id.delete_chat: 
       Arraylist<Chat> userElement =   User.getIstance().getChats(); 
       for (int i = 0; i < elementsToRemove.size(); ++i) { 
       userElement.removeChat(elementsToRemove.get(i)); 



       } 

       adapter.notifyDataSetChanged(); 
       actionMode.finish(); 
       return true; 

      default: 
       return false; 
      } 

     } 

перед тем удаление, если я создать новый чат и попытаться добавить текст в нем работает. После удаления, если я создаю новый чат и попробую добавить текст, он не добавит текст.

это, как я удалить элементы из ArrayList:

for(int i = 0 ; i < chats.size();++i){ 
      if(chats.get(i).equals(chat)) { 
       return chats.remove(i); 
     } 
     } 
    return new Chat("null",0); 
} 

Вполне возможно, что я «перерыв» ссылка на пользователя ArrayList?

+0

Посмотрите на методы «Удалить» и «Удалить» – geekonedge

ответ

1

Если вы используете это:

Arraylist<Chat> userElement = User.getIstance().getChats(); 

Оба userElement и User.getIstance().getChats() будет использовать тот же подчеркивание array, изменение сделано либо один из них будет отражать в другой.

Если вы хотите иметь два разных Objects, создать второй ArrayList так:

Arraylist<Chat> userElement = new ArrayList <Char>(User.getIstance().getChats()); 

Кроме того, этот цикл:

for(int i = 0 ; i < chats.size();++i){ 
     if(chats.get(i).equals(chat)) { 
      return chats.remove(i); 
     } 
    } 

бросит ConcurrentModificationException, если вы хотите удалить Object s от List пока вы его итерируете, вы должны использовать Iterator.

+0

Я не хочу, чтобы второй ArrayList. Я не знаю, почему, но после удаления я не могу добавить новые элементы в список. Я просто попробовал этот случай: имея 2 элемента (оба из них с данными в нем), удалите первый, теперь я не вижу данные другого элемента ... почему? кажется, что я потерял ссылку go datastructure. – HaZe

Смежные вопросы