我正在尝试为我的网站管理员创建简单的通知系统,我只需要向每个管理员用户发送实时消息.但是当我使用firebase时,它会在每个页面上加载旧数据,并且用户可以看到来自数据库的所有消息.如果我设置limit(1),用户将在每个页面重新加载时看到最后一个通知:
var eventsList = new Firebase('https://*****-messages.firebaseio.com/');
eventsList.on('child_added', function(message) {
var message = message.val();
$.notification(message.message);
});
Run Code Online (Sandbox Code Playgroud)
如何在没有旧通知历史的情况下仅加载新邮件?
我知道有很多方法可以为RecyclerView提供一个空视图.但我的问题是针对FirebaseRecyclerView.
我的布局是:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/feed_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical" />
<ProgressBar
android:id="@+id/feed_loading"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:visibility="gone"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
所以我在RecyclerView填充其项目之前显示正在加载ProgressBar.现在如果服务器没有任何项目怎么办?在这种情况下,我的RecyclerView始终为空,我的Loading ProgressBar始终对用户可见.
因此,我希望显示一些空布局,而不是无限期地显示ProgressBar.例如"找不到数据"或类似的消息.
最终结果应该是:ProgressBar应该显示,直到数据加载到RecyclerView,一旦数据加载,ProgressBar应该是不可见的.但是如果服务器中没有数据,则应显示一些空布局而不是ProgressBar.
在普通的RecyclerView中,我们有一个数据集(某些ArrayList等),如果它是空的,那么我们可以显示那个空布局.但是对于FirebaseRecyclerAdapter,我在我的Activity或Context中没有Snapshot的引用.我也没有任何回调告诉我服务器中没有数据.
任何解决方法都会有很大帮助.
android firebase android-recyclerview firebase-realtime-database firebaseui
我正在制作一个简单的应用程序,通知客户其他客户点击了一个按钮.我db使用以下方法将点击存储在Firebase()中:
db.push({msg:data});
Run Code Online (Sandbox Code Playgroud)
所有客户都会收到其他用户的点击通知on,例如
db.on('child_added',function(snapshot) {
var msg = snapshot.val().msg;
});
Run Code Online (Sandbox Code Playgroud)
但是,当页面首次加载时,我想丢弃堆栈中的任何现有数据.我的策略是db.once()在定义之前调用db.on('child_added',...)以获取初始数量的子节点,然后使用它来丢弃该调用的数量db.on('child_added',...).
不幸的是,所有对db.on('child_added',...)的调用都是在我能够获得初始计数之前发生的,所以它失败了.
我怎样才能有效而简单地丢弃初始数据?