onCreateViewHolder 未在 FirebaseRecyclerAdapter 中调用
onCreateViewHolder not being called in FirebaseRecyclerAdapter
执行控制似乎没有进入onCreateViewHolder;数据没有显示在屏幕上。
似乎正在调用 onStart 和 onBindViewHolder,但没有调用 onCreateViewHolder。
我已经尝试了很多东西,已经尝试找出解决方案 2 天了。我有:
1. 删除 setHasFixdSize(true),没用
添加 setHasFixedSize(false),也没用
将相对布局转换为框架布局,反之亦然。
降级所有 firebase 依赖项并使用 populateview 方法。也没用
- 从 firebase 中删除所有数据也不起作用。
- 我以前在 onStart 中有适配器,现在我在 onCreate 中有它
- 重新输入我的整个代码,希望它能工作,但没有。
UsersActivity.java
重要声明:
private RecyclerView usersList;
private DatabaseReference mUsersDatabase;
private FirebaseRecyclerAdapter<Users, UserHolders> firebaseRecyclerAdapter;
在 onCreate 中:
usersList = (RecyclerView) findViewById(R.id.user_list);
usersList.setHasFixedSize(false);
usersList.setLayoutManager(new LinearLayoutManager(this));
DatabaseReference userRef = FirebaseDatabase.getInstance().getReference().child("Users");
FirebaseRecyclerOptions<Users> options = new FirebaseRecyclerOptions.Builder<Users>()
.setQuery(userRef, Users.class)
.build();
firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Users, UserHolders>(options) {
@Override
protected void onBindViewHolder(UserHolders holder, int position, Users model) {
holder.userName.setText(model.getName());
holder.userStatus.setText(model.getImage());
Picasso.get().load(model.getImage()).into(holder.userProfile);
Toast.makeText(UsersActivity.this, "working onBind", Toast.LENGTH_SHORT).show();
}
@Override
public UserHolders onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.users_single_layout, viewGroup, false);
UserHolders userHolders = new UserHolders(view);
Toast.makeText(UsersActivity.this, "working onCreate", Toast.LENGTH_SHORT).show();
return userHolders;
}
};
usersList.setAdapter(firebaseRecyclerAdapter);
在 onStart()
super.onStart();
Toast.makeText(this, "onStart being called", Toast.LENGTH_SHORT).show();
firebaseRecyclerAdapter.startListening();
在 onStop()
super.onStop();
firebaseRecyclerAdapter.stopListening();
ViewHolder Class:
public static class UserHolders extends RecyclerView.ViewHolder {
TextView userName, userStatus;
CircleImageView userProfile;
public UserHolders(@NonNull View itemView) {
super(itemView);
userName = itemView.findViewById(R.id.user_single_name);
userProfile = itemView.findViewById(R.id.user_single_image);
userStatus = itemView.findViewById(R.id.user_single_status);
}
}
型号class
public class Users {
public String name;
public String image;
public String status;
public Users(){}
public Users(String name, String image, String status) {
this.name = name;
this.image = image;
this.status = status;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public String getImage() {return image;}
public void setImage(String image) {this.image = image;}
public String getStatus() {return status;}
public void setStatus(String status) {this.status = status;}
}
Firebase 依赖项:
implementation 'com.google.firebase:firebase-database:16.1.0'
implementation 'com.google.firebase:firebase-storage:16.1.0'
implementation 'com.google.firebase:firebase-auth:16.1.0'
implementation 'com.firebaseui:firebase-ui-database:4.3.2'
所以我预计所有的 toasts 都能正常工作,表明完整的代码确实正在编译。
onBindViewHolder 和 onStart 中的 toast 被调用,但 onCreateViewHolder 中的不被调用。
所以数据结构如下
teteatete-c08f9
-Users
-FxFcc..............
.- image
.- name
.- status
.- thumb_image
我检查过模型 class 变量与这些字段同名
您的代码看起来很完美。
您是否检查过 Firebase 控制台中的规则?
把它们从假变成真。
转到 Firebase 中的 real-time 数据库,然后在规则中将 false 替换为 true。
那它一定能用。
执行控制似乎没有进入onCreateViewHolder;数据没有显示在屏幕上。 似乎正在调用 onStart 和 onBindViewHolder,但没有调用 onCreateViewHolder。
我已经尝试了很多东西,已经尝试找出解决方案 2 天了。我有: 1. 删除 setHasFixdSize(true),没用
添加 setHasFixedSize(false),也没用
将相对布局转换为框架布局,反之亦然。
降级所有 firebase 依赖项并使用 populateview 方法。也没用
- 从 firebase 中删除所有数据也不起作用。
- 我以前在 onStart 中有适配器,现在我在 onCreate 中有它
- 重新输入我的整个代码,希望它能工作,但没有。
UsersActivity.java
重要声明:
private RecyclerView usersList;
private DatabaseReference mUsersDatabase;
private FirebaseRecyclerAdapter<Users, UserHolders> firebaseRecyclerAdapter;
在 onCreate 中:
usersList = (RecyclerView) findViewById(R.id.user_list);
usersList.setHasFixedSize(false);
usersList.setLayoutManager(new LinearLayoutManager(this));
DatabaseReference userRef = FirebaseDatabase.getInstance().getReference().child("Users");
FirebaseRecyclerOptions<Users> options = new FirebaseRecyclerOptions.Builder<Users>()
.setQuery(userRef, Users.class)
.build();
firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Users, UserHolders>(options) {
@Override
protected void onBindViewHolder(UserHolders holder, int position, Users model) {
holder.userName.setText(model.getName());
holder.userStatus.setText(model.getImage());
Picasso.get().load(model.getImage()).into(holder.userProfile);
Toast.makeText(UsersActivity.this, "working onBind", Toast.LENGTH_SHORT).show();
}
@Override
public UserHolders onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.users_single_layout, viewGroup, false);
UserHolders userHolders = new UserHolders(view);
Toast.makeText(UsersActivity.this, "working onCreate", Toast.LENGTH_SHORT).show();
return userHolders;
}
};
usersList.setAdapter(firebaseRecyclerAdapter);
在 onStart()
super.onStart();
Toast.makeText(this, "onStart being called", Toast.LENGTH_SHORT).show();
firebaseRecyclerAdapter.startListening();
在 onStop()
super.onStop();
firebaseRecyclerAdapter.stopListening();
ViewHolder Class:
public static class UserHolders extends RecyclerView.ViewHolder {
TextView userName, userStatus;
CircleImageView userProfile;
public UserHolders(@NonNull View itemView) {
super(itemView);
userName = itemView.findViewById(R.id.user_single_name);
userProfile = itemView.findViewById(R.id.user_single_image);
userStatus = itemView.findViewById(R.id.user_single_status);
}
}
型号class
public class Users {
public String name;
public String image;
public String status;
public Users(){}
public Users(String name, String image, String status) {
this.name = name;
this.image = image;
this.status = status;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public String getImage() {return image;}
public void setImage(String image) {this.image = image;}
public String getStatus() {return status;}
public void setStatus(String status) {this.status = status;}
}
Firebase 依赖项:
implementation 'com.google.firebase:firebase-database:16.1.0'
implementation 'com.google.firebase:firebase-storage:16.1.0'
implementation 'com.google.firebase:firebase-auth:16.1.0'
implementation 'com.firebaseui:firebase-ui-database:4.3.2'
所以我预计所有的 toasts 都能正常工作,表明完整的代码确实正在编译。 onBindViewHolder 和 onStart 中的 toast 被调用,但 onCreateViewHolder 中的不被调用。
所以数据结构如下
teteatete-c08f9
-Users
-FxFcc..............
.- image
.- name
.- status
.- thumb_image
我检查过模型 class 变量与这些字段同名
您的代码看起来很完美。 您是否检查过 Firebase 控制台中的规则? 把它们从假变成真。 转到 Firebase 中的 real-time 数据库,然后在规则中将 false 替换为 true。 那它一定能用。