在RecyclerView中显示过滤后的Firebase实时数据库

时间:2018-11-15 09:14:26

标签: java android firebase firebase-realtime-database android-recyclerview

我正在对Firebase实时数据库中的数据执行多次过滤。例如,我首先过滤小于20岁的人,如果结果计数小于50,则需要重新访问数据库以再次过滤小于30岁的人,依此类推……因此,我需要多次使用addChildEventListener

被选中的人员列表将显示在RecyclerView中。

我这样做是

adapter = new Adapter(this, getListFromFirebase());
view= findViewById(R.id.my_view);
view.setLayoutManager(manager);
view.setAdapter(adapter);

getListFromFirebase()是使用addChildEventListener从Firebase实时数据库获取数据的函数。

但是,由于Firebase Realtime数据库是异步的,因此在初始化RecyclerView时,它始终会向RecyclerView返回一个空列表。有什么方法可以确保我在进入RecyclerView之前可以从Firebase Realtime数据库成功获取想要的列表?

1 个答案:

答案 0 :(得分:0)

由于firebase异步任务,您的方法getListFromFirebase()将始终返回null。而是在您的notifyAdapter处创建一个新方法,您可以从onChildAdded方法中调用它。

尝试一下

声明一个变量:

ArrayList<YourModel> list = new ArrayList<>();

即使它为空也将其传递给适配器:

adapter = new Adapter(this, list);
view= findViewById(R.id.my_view);
view.setLayoutManager(manager);
view.setAdapter(adapter);
getListFromFirebase(); // Dont return anything from this method. declare it void


void getListFromFirebase(){
  //firebaselistener task
   onChildAdded(){

     YourModel yourModel = dataSnapshot.getValue();
     mAdapter.addNewData(yourModel); //create a new method to update recyclerview Adapter
   }
}

适配器:

void addNewData(YourModel newData){
  list.add(newData);  //assign the list value to adapter list
  notifyAdapterChange();
}