Android 为什么不是';我的应用程序是否在我的recyclerview中显示数据库中的用户?
请让我知道为什么我的recyclerview没有在用户片段中显示用户列表。我遵循这个GitHub教程,但问题是他们使用了Firebase实时数据库,而我使用的是Firebase Firestore。我是一个android编程的初学者,我正在YouTube上自学,所以如果我犯了一个愚蠢的错误,我深表歉意。我想显示我的用户的数据库的屏幕截图是 UserFragment.javaAndroid 为什么不是';我的应用程序是否在我的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
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();