1.在build.gradle中添加Firebase Firestore和Recyclerview的依赖:
implementation 'com.google.firebase:firebase-firestore:23.0.1'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
private FirebaseFirestore db;
private MyAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
db = FirebaseFirestore.getInstance();
RecyclerView recyclerView = findViewById(R.id.recyclerView);
mAdapter = new MyAdapter();
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(mAdapter);
loadData();
}
private void loadData() {
db.collection("users") // 指定Firestore集合
.orderBy("name") // 按名字排序
.get()
.addOnSuccessListener(queryDocumentSnapshots -> {
for (QueryDocumentSnapshot document : queryDocumentSnapshots) {
User user = document.toObject(User.class);
mAdapter.addData(user); // 添加数据到适配器
}
mAdapter.notifyDataSetChanged(); // 刷新数据
})
.addOnFailureListener(e -> Log.e(TAG, "Error getting data", e));
}
public class MyAdapter extends RecyclerView.Adapter {
private List mData = new ArrayList<>();
public void addData(User user) {
mData.add(user);
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_user, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
User user = mData.get(position);
holder.nameTextView.setText(user.getName());
holder.emailTextView.setText(user.getEmail());
}
@Override
public int getItemCount() {
return mData.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
TextView nameTextView;
TextView emailTextView;
ViewHolder(@NonNull View itemView) {
super(itemView);
nameTextView = itemView.findViewById(R.id.nameTextView);
emailTextView = itemView.findViewById(R.id.emailTextView);
}
}
}
在加载数据时,通过Firestore的addSnapshotListener()
方法来监听数据,当数据有变化时会自动更新RecyclerView。