从ArrayList中删除元素

时间:2015-01-23 22:30:30

标签: java android listview arraylist singleton

我有一个名为User的Singleton类,这个用户有一个ArrayList。 现在我有一个显示用户元素的ListView,选择它们,然后按下一个按钮,它将删除所选元素; 在这种情况下:

    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);
}

我可能会“破坏”对User ArrayList的引用吗?

1 个答案:

答案 0 :(得分:1)

如果您使用此:

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

userElementUser.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移除List,则必须使用Iterator