我需要对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
的所有查询。
答案 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
一次。
希望它有所帮助。