繁体   English   中英

从子目录中删除对象删除android

[英]Remove object from list on child removed android

我有一个类的对象的arrayList。 此类包含从Firebase接收的数据。

但是我想在Firebase中删除一个孩子时从列表中删除一个对象,但是两个对象不匹配,因为快照会创建包含相同数据的类的新对象。 这是我实施的代码:

posts = new ArrayList<>();

        childEventListener= new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                posts.add(dataSnapshot.getValue(GalleryPostModel.class));
                unapprovedAdapter.notifyDataSetChanged();
            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
                posts.remove(dataSnapshot.getValue(GalleryPostModel.class));
                unapprovedAdapter.notifyDataSetChanged();
            }

            @Override
            public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        };

        UnApprovedDbRef.addChildEventListener(childEventListener);

那么我该如何解决这个问题呢? 我该怎么做才能将其从列表中删除。 我可以在列表中进行线性搜索,但是当列表很大时,此任务将非常耗时。 (无法使用.removeIf,因为它要求最低api级为24,但我的应用的最低api为22)

除了保留值之外,为了能够删除项目,您必须保留其密钥。

因此,您为密钥创建了一个附加列表:

keys = new ArrayList<String>();

然后在onChildAdded ,将快照的键添加到此列表中:

public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
    posts.add(dataSnapshot.getValue(GalleryPostModel.class));
    keys.add(dataSnapshot.getKey());
    unapprovedAdapter.notifyDataSetChanged();
}

现在你可以在onChildRemoved查找键,这比查找post / value快得多:

public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
    int index = keys.indexOf(dataSnapshot.getKey());
    posts.remove(index);
    keys.remove(index);
    unapprovedAdapter.notifyDataSetChanged();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM