为什么我的应用没有在我的回收器视图中显示数据库中的用户?



请让我知道为什么我的回收器视图没有显示用户片段中的用户列表。我正在遵循这个GitHub教程,但问题是他们使用了Firebase实时数据库,而我正在使用Firebase Firestore。我是安卓编程的初学者,正在你管上自己学习,所以如果我的错误是愚蠢的,我深表歉意。我想从中显示我的用户的数据库的屏幕截图在这里。

用户片段.java

package com.example.authenticatorapp.Fragments;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.example.authenticatorapp.Adapters.UserAdapter;
import com.example.authenticatorapp.R;
import com.firebase.ui.firestore.FirestoreRecyclerOptions;
import com.example.authenticatorapp.User;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.FirebaseFirestore;
import java.util.ArrayList;
import java.util.List;
public class UsersFragment extends Fragment {
private FirebaseFirestore db = FirebaseFirestore.getInstance();
private CollectionReference userRef = db.collection("users");
private UserAdapter userAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_users, container, false);
RecyclerView recyclerView1 = view.findViewById(R.id.recyclerview);
recyclerView1.setHasFixedSize(true);
recyclerView1.setLayoutManager(new LinearLayoutManager(getContext()));
readUsers();
recyclerView1.setAdapter(userAdapter);

return  view;
}
private void readUsers(){
FirestoreRecyclerOptions<User> options = new FirestoreRecyclerOptions.Builder<User>()
.setQuery(userRef, User.class)
.build();
userAdapter = new UserAdapter(options);
}
}

fragment_users.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#660000"
tools:context=".Fragments.UsersFragment">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.recyclerview.widget.RecyclerView>
</RelativeLayout>

用户.java

package com.example.authenticatorapp;
public class User {
private String fName;
public User() {
}
public User(String fName) {
this.fName = fName;
}

public String getfName() {
return fName;
}
}

用户适配器.java

package com.example.authenticatorapp.Adapters;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.authenticatorapp.R;
import com.example.authenticatorapp.User;
import com.firebase.ui.firestore.FirestoreRecyclerAdapter;
import com.firebase.ui.firestore.FirestoreRecyclerOptions;

public class UserAdapter extends FirestoreRecyclerAdapter<User, UserAdapter.ViewHolder> {
public UserAdapter(@NonNull FirestoreRecyclerOptions<User> options) {
super(options);
}
@Override
protected void onBindViewHolder(@NonNull ViewHolder holder, int position, @NonNull User model) {
holder.fName.setText(model.getfName());
holder.profile_image.setImageResource(R.mipmap.ic_launcher);
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.user_item, parent, false);
return new UserAdapter.ViewHolder(view);
}

class ViewHolder extends RecyclerView.ViewHolder{
public TextView fName;
public ImageView profile_image;
public ViewHolder(View itemView){
super(itemView);
fName = itemView.findViewById(R.id.username);
profile_image = itemView.findViewById(R.id.profile_image);
}
}
}

user_item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/profile_image"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@mipmap/ic_launcher">
</de.hdodenhof.circleimageview.CircleImageView>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="username"
android:id="@+id/username"
android:layout_toRightOf="@id/profile_image"
android:layout_toEndOf="@id/profile_image"
android:layout_marginLeft="10dp"
android:layout_centerVertical="true"
android:textSize="18sp"
android:textColor="#FFEB3B">
</TextView>
</RelativeLayout>

在将adapter设置为recyclerView之前调用readUsers(),因为您需要先初始化适配器。

public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_users, container, false);
RecyclerView recyclerView1 = view.findViewById(R.id.recyclerview);
recyclerView1.setHasFixedSize(true);
recyclerView1.setLayoutManager(new LinearLayoutManager(getContext()));
/******************/
readUsers();
recyclerView1.setAdapter(userAdapter);
/******************/
return  view;
}

更新

您还需要像这样为适配器设置生命周期所有者

FirestoreRecyclerOptions<User> options = new FirestoreRecyclerOptions.Builder<User>()
.setQuery(userRef, User.class)
.setLifecycleOwner(this)
.build();

最新更新