You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:17:25