使用FirebaseListAdapter时getCount()返回0,如何获取元素数量?
问题分析与解决方案
你遇到的这个问题其实是Firebase异步加载数据的特性导致的——FirebaseListAdapter是异步从云端获取数据的,你在刚调用appointmentListView.setAdapter(mAppointmentAdapter)后立刻调用getCount(),这时候数据还没完成加载,所以返回0是完全正常的。
正确的解决思路
要获取正确的元素数量,你需要等到Firebase的数据加载完成(或者数据发生变化)时再去调用getCount()。FirebaseListAdapter提供了onDataChanged()方法,这个方法会在数据首次加载完成、或者数据有增删改的时候自动触发,我们可以利用这个方法来更新数量显示。
修改后的代码示例
mAppointmentAdapter = new FirebaseListAdapter<Appointment>(options) { @Override public void populateView(View view, Appointment appointment, int position) { TextView nameTextView = view.findViewById(R.id.app_patient_name_view); TextView reasonTextView = ... // 你的原有视图填充逻辑 } // 重写onDataChanged方法,监听数据加载/变化事件 @Override public void onDataChanged() { super.onDataChanged(); // 此时数据已经加载完成,getCount()能拿到正确的数量 int mAppointmentsCount = mAppointmentAdapter.getCount(); mAppointmentsCountView.setText(String.valueOf(mAppointmentsCount)); } }; appointmentListView.setAdapter(mAppointmentAdapter);
为什么这样有效?
当FirebaseListAdapter完成数据加载、或者后续数据有更新时,onDataChanged()会被回调,这时候适配器已经持有了最新的数据集,调用getCount()就能得到准确的元素数量,再更新UI就没问题了。
内容的提问来源于stack exchange,提问作者Rajesh
相关产品推荐
相关产品推荐

