在片段的 RecyclerView 中没有收到任何值
Didnt receive any value in RecycleView in my fragment
以前我成功地在我的应用程序中列出了来自 Cloud Firestore 的数据。但是现在我正在尝试实现列出片段中数据的 RecyclerView 但我没有得到结果。该片段显示空结果。这是我的代码
ReviewFragment.java
public class ReviewFragment extends Fragment {
private FirebaseFirestore db = FirebaseFirestore.getInstance();
private CollectionReference userRef = db.collection("Users");
private UserAdapter adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_review,container,false);
Query query = userRef.orderBy("name",Query.Direction.ASCENDING);
FirestoreRecyclerOptions<Userz> options = new FirestoreRecyclerOptions.Builder<Userz>()
.setQuery(query,Userz.class)
.build();
adapter = new UserAdapter(options);
RecyclerView recyclerView = (RecyclerView)view.findViewById(R.id.rvReview);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this.getActivity());
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(adapter);
return view;
}
}
UserAdapter.java
public class UserAdapter extends FirestoreRecyclerAdapter <Userz,UserAdapter.UserHolder>{
/**
* Create a new RecyclerView adapter that listens to a Firestore Query. See
* {@link FirestoreRecyclerOptions} for configuration options.
*
* @param options
*/
public UserAdapter(FirestoreRecyclerOptions<Userz> options) {
super(options);
}
@Override
protected void onBindViewHolder(UserHolder userHolder, int i, Userz userz) {
userHolder.textViewName.setText(userz.getName());
userHolder.textViewStatus.setText(userz.getStatus());
userHolder.textViewMessage.setText(userz.getMessages());
}
@NonNull
@Override
public UserHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview,parent,false);
return new UserHolder(v);
}
class UserHolder extends RecyclerView.ViewHolder{
TextView textViewName;
TextView textViewMessage;
TextView textViewStatus;
public UserHolder(View itemView) {
super(itemView);
textViewName = itemView.findViewById(R.id.name);
textViewMessage = itemView.findViewById(R.id.messages);
textViewStatus = itemView.findViewById(R.id.status);
}
}
}
FirestorePagingAdapter 生命周期
Start/stop 聆听
FirestorePagingAdapter 侦听滚动事件并仅在需要时从数据库加载其他页面。
要开始填充数据,请调用 startListening() 方法。您可能想在 onStart() 方法中调用它。在调用 startListening() 之前,请确保您已完成读取数据所需的任何身份验证,否则您的查询将失败。
protected void onStart() {
super.onStart();
adapter.startListening();
}
Similarly, the stopListening() call freezes the data in the RecyclerView and prevents any future loading of data pages.
Call this method when the containing Activity or Fragment stops:
@Override
protected void onStop() {
super.onStop();
adapter.stopListening();
}
自动监听
如果您不想手动 start/stop 监听,您可以使用 Android 架构组件来自动管理 FirestorePagingAdapter 的生命周期。
将 LifecycleOwner 传递给 FirestorePagingOptions.Builder#setLifecycleOwner(...),FirebaseUI 将自动启动和停止监听 onStart() 和 onStop()。
Github https://github.com/firebase/FirebaseUI-Android/tree/master/firestore
您的适配器中没有 getCount() 方法 class。实施方法和 return 列表大小。
以前我成功地在我的应用程序中列出了来自 Cloud Firestore 的数据。但是现在我正在尝试实现列出片段中数据的 RecyclerView 但我没有得到结果。该片段显示空结果。这是我的代码
ReviewFragment.java
public class ReviewFragment extends Fragment {
private FirebaseFirestore db = FirebaseFirestore.getInstance();
private CollectionReference userRef = db.collection("Users");
private UserAdapter adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_review,container,false);
Query query = userRef.orderBy("name",Query.Direction.ASCENDING);
FirestoreRecyclerOptions<Userz> options = new FirestoreRecyclerOptions.Builder<Userz>()
.setQuery(query,Userz.class)
.build();
adapter = new UserAdapter(options);
RecyclerView recyclerView = (RecyclerView)view.findViewById(R.id.rvReview);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this.getActivity());
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(adapter);
return view;
}
}
UserAdapter.java
public class UserAdapter extends FirestoreRecyclerAdapter <Userz,UserAdapter.UserHolder>{
/**
* Create a new RecyclerView adapter that listens to a Firestore Query. See
* {@link FirestoreRecyclerOptions} for configuration options.
*
* @param options
*/
public UserAdapter(FirestoreRecyclerOptions<Userz> options) {
super(options);
}
@Override
protected void onBindViewHolder(UserHolder userHolder, int i, Userz userz) {
userHolder.textViewName.setText(userz.getName());
userHolder.textViewStatus.setText(userz.getStatus());
userHolder.textViewMessage.setText(userz.getMessages());
}
@NonNull
@Override
public UserHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview,parent,false);
return new UserHolder(v);
}
class UserHolder extends RecyclerView.ViewHolder{
TextView textViewName;
TextView textViewMessage;
TextView textViewStatus;
public UserHolder(View itemView) {
super(itemView);
textViewName = itemView.findViewById(R.id.name);
textViewMessage = itemView.findViewById(R.id.messages);
textViewStatus = itemView.findViewById(R.id.status);
}
}
}
FirestorePagingAdapter 生命周期 Start/stop 聆听 FirestorePagingAdapter 侦听滚动事件并仅在需要时从数据库加载其他页面。
要开始填充数据,请调用 startListening() 方法。您可能想在 onStart() 方法中调用它。在调用 startListening() 之前,请确保您已完成读取数据所需的任何身份验证,否则您的查询将失败。
protected void onStart() {
super.onStart();
adapter.startListening();
}
Similarly, the stopListening() call freezes the data in the RecyclerView and prevents any future loading of data pages.
Call this method when the containing Activity or Fragment stops:
@Override
protected void onStop() {
super.onStop();
adapter.stopListening();
}
自动监听 如果您不想手动 start/stop 监听,您可以使用 Android 架构组件来自动管理 FirestorePagingAdapter 的生命周期。 将 LifecycleOwner 传递给 FirestorePagingOptions.Builder#setLifecycleOwner(...),FirebaseUI 将自动启动和停止监听 onStart() 和 onStop()。
Github https://github.com/firebase/FirebaseUI-Android/tree/master/firestore
您的适配器中没有 getCount() 方法 class。实施方法和 return 列表大小。