Firebase正在两次调用onChildAdded

时间:2017-03-10 23:01:52

标签: android firebase firebase-realtime-database searchview

我在SearchTextView OnQueryListener中调用OnChildAdded方法,该方法使用OnChildAdded方法在Dialog中搜索和显示记录。但是当我运行代码时,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);}

1 个答案:

答案 0 :(得分:1)

将为与您的查询匹配的每个子节点调用

onChildAdded。但是请注意,每次用户提交搜索文本时,您都会添加一个新的子侦听器。因此,如果他们提交两次,您将有两个听众,并且每个孩子将为您的onChildAdded调用两次(每个听众一次)。然后当他们再次提交搜索时,它会添加第三个侦听器。等等。

解决方案是在附加新侦听器之前分离先前的侦听器。请参阅documentation for detaching listeners。或者使用她的代码获取灵感:How stop Listening to firebase location in android