使用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
相关产品推荐
相关产品推荐

