我的应用中包含Google plus。我正在尝试将我的应用程序分享给ListView中显示的朋友列表中的特定人员。
在列表视图中选择人物时,我将它们添加到收件人arraylist。
如下所示:
private ArrayList<Person> recipients;
recipients= new ArrayList<Person>();
recipients.add(PlusShare.createPerson(person_ID, person_DISPLAY_NAME));
我还有一个打开共享活动的按钮,并使用收件人arraylist获取人员ID,要分享的名称。这部分工作正常。
现在我想从收件人数组列表中删除某个人。这也是在项目点击时完成的。
我尝试了以下内容:
recipients.remove(person_ID);
这样我就无法从arraylist中删除该项目。如何从recipeints arraylist中删除人员详细信息?
答案 0 :(得分:2)
您必须明确删除类Person
的对象。
试试这个:
recipients.remove(PlusShare.createPerson(person_ID, person_DISPLAY_NAME));
或者您可以迭代列表中的所有人,比较ID并删除具有匹配ID的元素。
for (Iterator<Person> it = recipients.iterator(); it.hasNext();) {
Person p = it.next();
if (p.getId() == person_ID) { // <-- supposed that getId() exists
it.remove();
}
}
答案 1 :(得分:0)
由于您的person_ID
是唯一的,您可以使用地图界面,您可以使用person_ID
作为键,值是对象Person
<强>样品:强>
Map<Integer, Person> map = new HashMap<>();
将对象放入地图
map.put(person_ID, PlusShare.createPerson(person_ID, person_DISPLAY_NAME));
获取/删除地图
if(map.get(person_ID) != null)
map.remove(person_ID);
关于使用Map的原因是它的速度为O(1)
big-O
答案 2 :(得分:0)
我会使用额外的Map来存储其ID引用的Person对象。这样,您就可以将正确的对象移除到列表中。
private ArrayList<Person> recipients;
recipients= new ArrayList<Person>();
private Map<String,Person> recipientsById = new HashMap<String,Person>;
Person newPerson = PlusShare.createPerson(person_ID, person_DISPLAY_NAME);
recipients.add(newPerson);
recipientsById.put(personId,newPerson);
这样,从列表中删除对象就会变成:
recipients.remove(recipientsById.get(person_ID));
recipientsById.remove(person_ID);
当然,现在有2个变量要处理,这可能看起来很复杂。因此,还有两个解决方案只能使用一个变量:
所以有3种解决方案适合您。选择正确的取决于您和您的问题中未说明的实施细节。
(编辑:最后的解决方案都是由@rod和@Ridcully提供的)