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

使用FirestoreRecyclerAdapter时RecyclerView无法显示Firestore用户列表

解决Firestore RecyclerView显示空白的问题

我帮你排查了代码里的几个关键问题,这些问题正是导致RecyclerView页面空白的原因,咱们一个个来修正:

1. 未启动Firestore数据监听,且适配器变量被覆盖

FirestoreRecyclerAdapter需要在Activity生命周期中手动启动/停止数据监听,你没重写onStart()和onStop()方法,数据根本不会被加载。另外你在onCreate里声明了局部的adapter变量,覆盖了成员变量,导致后续生命周期方法拿不到正确的适配器实例。

修改MainActivity代码:

// 先把成员变量的adapter声明补全类型(更规范)
private FirestoreRecyclerAdapter<Users, FriendsHolder> adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mUsersList = findViewById(R.id.recyclerview_list);
    mUsersList.setLayoutManager(new LinearLayoutManager(this));
    muser = FirebaseFirestore.getInstance().collection("users");
    Query query = muser;
    
    FirestoreRecyclerOptions<Users> options = new FirestoreRecyclerOptions.Builder<Users>()
            .setQuery(query, Users.class).build();
    
    // 不要声明局部变量,直接给成员变量赋值
    adapter = new FirestoreRecyclerAdapter<Users, FriendsHolder>(options) {
        @Override
        public FriendsHolder onCreateViewHolder(ViewGroup group, int i) {
            View view = LayoutInflater.from(group.getContext())
                    .inflate(R.layout.single_user, group, false);
            return new FriendsHolder(view);
        }

        @Override
        public void onError(FirebaseFirestoreException e) {
            Log.e("error", e.getMessage());
        }

        @Override
        protected void onBindViewHolder(FriendsHolder holder, int position, Users model) {
            holder.nameText.setText(model.getName());
            holder.emailText.setText(model.getEmail());
        }
    };
    mUsersList.setAdapter(adapter);
}

// 必须添加这两个生命周期方法,启动/停止数据监听
@Override
protected void onStart() {
    super.onStart();
    if(adapter != null) {
        adapter.startListening();
    }
}

@Override
protected void onStop() {
    super.onStop();
    if(adapter != null) {
        adapter.stopListening();
    }
}

2. Users类Setter方法赋值错误

你的Users类里的setter方法没正确给成员变量赋值,参数名和成员变量名重名,没加this关键字,导致数据根本存不进去:

修改Users.java的setter方法:

public void setName(String name) {
    this.name = name; // 加this,指向类的成员变量
}

public void setEmail(String email) {
    this.email = email; // 同样修改
}

3. single_user.xml布局标签错误

item布局里的<view>是小写的,Android布局标签需要大写开头,而且这个分割线View没设置背景,就算显示了也看不到:

修改single_user.xml:

<!-- 把小写view改成大写View,并添加背景色 -->
<View
    android:layout_width="match_parent"
    android:layout_height="2dp"
    android:layout_marginTop="60dp"
    android:background="@android:color/darker_gray"/>

最后额外检查项

  • 确认Firestore的users集合里确实有数据,且字段名是name和email(Firestore字段名区分大小写)
  • 确认项目已正确配置Firebase,包括google-services.json文件,且Firestore读取权限正常(测试阶段可以暂时设置规则:allow read, write: if true;,上线后再改安全规则)

完成这些修改后,你的RecyclerView应该就能正常显示所有用户数据了。

内容的提问来源于stack exchange,提问作者Anurag Tiwari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:13:03