Firebase Android addChildEventListener说明

时间:2017-07-13 05:21:40

标签: android firebase firebase-realtime-database

我需要对addChildEventListener和Query事件绑定进行一些明确的解释。

我在我的Android应用程序中使用firebase。在我的活动的onCreate()方法中,我创建了类似的东西......

fiDbQuery = fiDbRef.child("users").orderByChild("name");
fiDbQuery.addChildEventListener(// listener //);

...其中fiDbQuery是活动中的Query个实例(全局变量),fiDbRef也是活动中的DatabaseReference个实例,我已经设置了初始值。

一切都很好,当活动首次加载时,所有用户数据都被加载并显示出来。但是,我有一些按钮可以根据用户字段对这些数据进行排序,无论是通过电子邮件,年龄,姓名等。

在那些按钮onClick事件监听器中,我做了类似这样的事情......(这是按年龄按钮排序)

fiDbQuery = fiDbRef.child("users").orderByChild("age");

...而且我没有提供addChildEventListener功能,因为它已经添加了#34;在onCreate()方法上,对吧?数据未加载,但如果我添加addChildEventListener功能,则会再次运行。

我的问题是,将多个addChildEventListener用于一个查询是否可以节省,或者是否存在任何性能问题?我想要帮助的只是重复使用fiDbQuery实例而无需在每次修改addChildEventListener时添加fiDbQuery

感谢您的帮助。

修改

我使用的所有查询都使用完全相同的侦听器。只有一个监听器用于填充listView的所有查询。

1 个答案:

答案 0 :(得分:3)

您无需再次添加addChildEventListener。你需要做的是改变行动的逻辑。

首先定义您的所有查询:

nameQuery = fiDbRef.child("users").orderByChild("name");
ageQuery = fiDbRef.child("users").orderByChild("age");
//and so on

要解决您的问题,您只需要使用if else-if statement,如下所示:

Query query;
if(nameButton.isClicked()) {
    query = nameQuery;
} else if(ageButton.isClicked()) {
    query = ageQuery;
}

query.addChildEventListener( // listener. //);

这意味着根据点击的按钮,您正在使用所需的查询。使用此代码,您只需使用addChildEventListener一次。

希望它有所帮助。