Firebase两次打电话给Onchildadd



我在搜索textview onqueryListener中调用 OnChildAdded方法,该方法使用OnChildAdded方法在对话框中搜索和显示记录。但是,当我运行代码时,OnChildAdded方法似乎将内部代码调用两次,因为对话框提示了两次,并且对于日志语句也相同。

这是方法的代码:

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
  mSearchQuery = query.trim();              
  mDatabaseReference.orderByChild("name").startAt(mSearchQuery).addChildEventListener(new ChildEventListener() {
    @Override
      public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        student = dataSnapshot.getValue(Student.class);
        FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
        EnrollOperationFragment enrollOperationFragment =  EnrollOperationFragment.newInstance(student.getName(),student.getId());
        enrollOperationFragment.show(fragmentManager,ENROLL_OPERATION);}

onChildAdded将针对每个孩子节点匹配您的查询。但还要注意,每次用户提交搜索文本时,您都会添加新的儿童侦听器。因此,如果他们提交两次,您将有两个听众,而您的onChildAdded将为每个孩子打电话两次(每个听众一次)。然后,当他们再次提交搜索时,它将添加第三个侦听器。等等。

解决方案是在附加新的侦听器之前分离以前的侦听器。请参阅单独听众的文档。或使用她的代码来灵感:如何停止在Android

中聆听Firebase位置

最新更新