Android Firebase:停止收听传递给适配器的查询

时间:2017-10-04 13:15:20

标签: android firebase-realtime-database

我正在使用FirebaseListAdapter在其构造函数中接受查询。我正在寻找一种方法来在将查询传递给构造函数后停止监听查询。

这是我创建查询并将其传递给适配器的地方:

        lvSportPics = (ListView) rootView.findViewById(R.id.lv_pics);

    final FirebaseDatabase database = FirebaseDatabase.getInstance();
    final DatabaseReference imagesRef = database.getReference().child(Constants.NODE_IMAGES);

    Query sportImagesQuery = imagesRef.orderByChild("sport").equalTo(sport);

    SportImagesAdapter imgAdapter = new SportImagesAdapter(getActivity(), SportImage.class,
            R.layout.list_item_sport_pic, sportImagesQuery);

    lvSportPics.setAdapter(imgAdapter);

这是适配器的构造函数:

public class SportImagesAdapter extends FirebaseListAdapter<SportImage> {

public SportImagesAdapter(Activity activity, Class<SportImage> modelClass, int modelLayout, Query query) {
    super(activity, modelClass, modelLayout, query);
}

我知道我可以使用valueEventListner,但我想我需要遍历结果,并且适配器有点在传递查询时自动执行。它运作良好,但它一直在听变化,我想要一种方法来停止听。

1 个答案:

答案 0 :(得分:0)

要解决此问题,您需要根据活动的生命周期删除侦听器,如下所示:

databaseReference.removeEventListener(valueEventListener);

如果您在onStart中添加了监听器,则必须在onStop中将其删除。 如果您已在onResume中添加了监听器,则必须在onPause中将其删除。 如果您已在onCreate中添加了监听器,则必须在onDestroy中将其删除。 但请记住onDestroy并不总是被调用。