Android 为什么不是';我的应用程序是否在我的recyclerview中显示数据库中的用户?

Android 为什么不是';我的应用程序是否在我的recyclerview中显示数据库中的用户?,android,android-fragments,google-cloud-firestore,android-adapter,Android,Android Fragments,Google Cloud Firestore,Android Adapter,请让我知道为什么我的recyclerview没有在用户片段中显示用户列表。我遵循这个GitHub教程,但问题是他们使用了Firebase实时数据库,而我使用的是Firebase Firestore。我是一个android编程的初学者,我正在YouTube上自学,所以如果我犯了一个愚蠢的错误,我深表歉意。我想显示我的用户的数据库的屏幕截图是 UserFragment.java package com.example.authenticatorapp.Fragments; impo

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

UserFragment.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);
        }
    }
UserAdapter.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);
        }
    }
}
package com.example.authenticatorapp.Adapters;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ImageView;
导入android.widget.TextView;
导入androidx.annotation.NonNull;
导入androidx.recyclerview.widget.recyclerview;
导入com.example.authenticatorapp.R;
导入com.example.authenticatorapp.User;
导入com.firebase.ui.firestore.FirestoreRecyclerAdapter;
导入com.firebase.ui.firestore.FirestoreRecyclerOptions;
公共类UserAdapter扩展FirestoreRecyclerAdapter{
公共用户适配器(@NonNull FirestoreRecyclerOptions选项){
超级(期权);
}
@凌驾
受保护的无效onBindViewHolder(@NonNull ViewHolder,int位置,@NonNull用户模型){
holder.fName.setText(model.getfName());
holder.profile\u image.setImageResource(R.mipmap.ic\u启动器);
}
@非空
@凌驾
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType){
View=LayoutFlater.from(parent.getContext()).flate(R.layout.user_项,parent,false);
返回新的UserAdapter.ViewHolder(视图);
}
类ViewHolder扩展了RecyclerView.ViewHolder{
公共文本视图fName;
公共图像查看剖面图;
公共视图持有者(视图项视图){
超级(项目视图);
fName=itemView.findviewbyd(R.id.username);
profile\u image=itemView.findviewbyd(R.id.profile\u 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>

在将
适配器设置为
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();
FirestoreRecyclerOptions选项=新建FirestoreRecyclerOptions.Builder()
.setQuery(userRef,User.class)
.setLifecycleOwner(此)
.build();

显示一个用户文档的内容。UserAdapter似乎从未初始化过,您必须在初始化之前对其进行初始化,因此将其设置为您的recyclerView。@AlexMamo我不明白您的要求。如果你看到了我的数据库图像,那么你就会明白我想在用户片段的列表中显示用户名。@SebastienRieu我已经在UserFragment中初始化了它。java@AaronDCosta那个截图没用。我们需要用户文档的内容来查看属性。感谢您的回复,但是它仍然没有显示用户。@AaronDCosta很高兴听到。你能把它标为正确答案吗?
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();