不要被标题愚弄认为这是垃圾邮件,请阅读到最后。
我有一个自定义ArrayAdapter
,其元素类型为News
。
我使用我的在线资源Firebase
填充该适配器。
在Firebase中有一个名为onChildRemoved
的侦听器,用于检测数据库子项是否已被删除。 (对于那些不知道的人)
以下是代码:
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
// this way you obtain the item removed
News news = dataSnapshot.getValue(News.class);
// here it doesn't remove the item
myAdapter.remove(news);
}
我知道它不会删除该项,因为我的news
对象没有引用适配器中的对象。
所以问题就出现了。
如何删除我没有引用的对象,但我有另一个全等对象?
更具体地说:
如何从ArrayAdapter中删除我的news
对象?!
答案 0 :(得分:2)
要做到这一点,你应该在新闻对象上实现equals
方法。此方法将比较此新闻的内部值。举个例子,如果你有新闻的id
字段,你可以这样做:
public class News {
String id;
@Override
public boolean equals(Object o) {
if(o instanceof News){
News other = (News) o;
return this.id.equals(other.id);
}else{
return false;
}
}
}
答案 1 :(得分:1)
您必须在News类中正确实现equals()方法。然后,即使有两个不同的实例,它也会被删除。
是关于
的区别a == b
和
a.equals(b)
当然,如果它是您remove()
类的自定义myAdapter
方法,则必须使用equals()
方法(而不是==
运算符)来标识要删除的对象。
所有标准集合实现都正确使用equals()
。