gpt4 book ai didi

android - 如何仅检索一次 firebase 数据库值而不监听子值,即使它们已更改

转载 作者:行者123 更新时间:2023-11-30 00:31:57 27 4
gpt4 key购买 nike

我有这种情况,在我的应用程序中,我试图查询子节点并将其传递到列表中到 recyclerview 适配器,当我向上滚动回收器 View 项目时,如果有人插入了一个帖子,问题就来了,我的 recyclerview 再次来到第一个帖子项目,而且我正在使用带有三个 fragment 的 viewpager,无论我在哪个 fragment 上,如果有人插入了帖子如何解决这个问题,我都会回滚到第一个 fragment 。我已经按照下面提到的方式实现了这一点。

我想的一种方式是我认为我不会听 child 事件的变化,而是我会查询结果并稍后填充 recyclerview 不听 child 事件,这样一切都按原样显示,我不知道在 firebase 中你如何在不实现监听器的情况下检索值 我尝试了 singleValueEventListener 这样的行为仍然是相同的回滚到第一个项目或第一个 fragment

指导我解决如何摆脱这种行为。

Query query= databasePostsReference.orderByChild("timestamp");

query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<UserPostPOJO> listposts = new ArrayList<UserPostPOJO>();
for(DataSnapshot snapshot : dataSnapshot.getChildren()){
Log.d(TAG, "onDataChange: entered list adding");
UserPostPOJO post =
snapshot.getValue(UserPostPOJO.class);
listposts.add(0,post);
}
if(listposts.isEmpty()){
empty.setVisibility(View.VISIBLE);
recyclerView.setVisibility(View.GONE);
}
else
{
empty.setVisibility(View.GONE);
recyclerView.setVisibility(View.VISIBLE);
makelist(listposts);
}


}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});




private void makelist(List<UserPostPOJO> listposts) {
list = listposts;
Log.d(TAG,"size is "+ list.size()+"");

recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new
LinearLayoutManager(getActivity()));
CustomRecyclerViewAdapter adapter = new
CustomRecyclerViewAdapter(getActivity(), list,"recentfragment");
recyclerView.setAdapter(adapter);


}

最佳答案

有一个名为removeEventListener() 的方法,您可以调用它来删除特定的事件监听器。您从数据库中获取数据,然后调用此方法。因此,为了使这项工作正常进行,请使用以下代码:

databaseReference.removeEventListener(valueEventListener);

其中 databaseReference 是您最初放置监听器的引用。

有关详细信息,请阅读 offcial doc .

希望对您有所帮助。

关于android - 如何仅检索一次 firebase 数据库值而不监听子值,即使它们已更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44166245/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com