当我向数据库写一些东西时,它会出现在设备上,但是当我从数据库中删除它时,它会留在应用程序中,直到我剪切应用程序。
当我想刷新 Firebase数据库时,我应该编码什么?( 使用swipeRefreshLayout)
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
swipeRefreshLayout.setRefreshing(true);
}
});
我写什么?
我写信给数据库:&#34; 示例文本&#34; 应用程序将显示:&#34;示例文本&#34;然后我从数据库中删除文本:&#34;示例文本&#34;,但应用程序仍显示:&#34; 示例文本< / EM>&#34 ;.我需要 swipeRefreshLayout ,因为我需要在应用程序中使用刷新数据库。
问题: 如何使用 SwipeRefreshLayout 从数据库中删除数据时刷新我的UI。
答案 0 :(得分:1)
实现此目的的最简单方法是使用以下代码行告知适配器您的数据已更改:
adapter.notifyDataSetChanged();
对于Firebase,更常见的做法是使用FirebaseUI。该库将为您处理所有事件,例如添加,删除或更新的项目。
答案 1 :(得分:0)
您必须使用在UI中显示的实时或实时更新数据条目在删除时删除或刷新它只需使用这些回调简单检查数据是否存在。
示例代码:用于收听实时更新(插入或删除)
ChildEventListener childEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
// ...
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) {
// ...
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
// ...
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String previousChildName) {
// ...
}
@Override
public void onCancelled(DatabaseError databaseError) {
// ...
}
};
这是您对子参考的查询
Query query = FirebaseDatabase.getInstance()
.getReference()
.child("chats")
.limitToLast(50);
query.addChildEventListener(childEventListener);
当您对所有情况进行回调时,无需使用滑动刷新。
答案 2 :(得分:0)
遇到同样的问题,和之前说过的一样,你可以使用firebase代码回调来做到这一点,这些链接可能对你有所帮助。
这里是Udacity course for firebase。
Here您还可以看到如何实现这些代码回调,因为Udacity course只显示了onChildAdded方法。
这里是Firebase codelabs的链接,是什么解决了这个问题。
如果你有正常工作,你的FirebaseRecyclerAdapter
应该像这样实例化,对吗?
private FirebaseRecyclerAdapter<FriendlyMessage, MessageViewHolder>
mFirebaseAdapter;
然后在你的onPause和onResume方法中,只需按照此处所示进行操作,每当你添加,删除或更改你在数据库中监听的任何数据时,它都会立即显示在应用程序中。
@Override
public void onPause() {
mFirebaseAdapter.stopListening();
super.onPause();
}
@Override
public void onResume() {
super.onResume();
mFirebaseAdapter.startListening();
}
这样您就不需要SwipeRefreshLayout
。
试试看。作品?