我正在使用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,但我想我需要遍历结果,并且适配器有点在传递查询时自动执行。它运作良好,但它一直在听变化,我想要一种方法来停止听。
答案 0 :(得分:0)
要解决此问题,您需要根据活动的生命周期删除侦听器,如下所示:
databaseReference.removeEventListener(valueEventListener);
如果您在onStart
中添加了监听器,则必须在onStop
中将其删除。
如果您已在onResume
中添加了监听器,则必须在onPause
中将其删除。
如果您已在onCreate
中添加了监听器,则必须在onDestroy
中将其删除。
但请记住onDestroy
并不总是被调用。