如何从ArrayAdapter中删除没有该对象引用但具有另一个全等对象的对象?

时间:2017-01-22 15:04:08

标签: java android firebase reference firebase-realtime-database

不要被标题愚弄认为这是垃圾邮件,请阅读到最后。

我有一个自定义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对象?!

2 个答案:

答案 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()