android - 如何从 Firebase 中检索数据并在 recyclerView 中一一显示孩子
问题描述
我有 2 个类。一个是 Groups,另一个是 GroupListAdapter。使用 RetrieveGroups 方法,我尝试获取 GroupName 的子项并在 recyclerView 中一一显示。字符串“retrieveGroupsName”的值类似于数据库中的值。德克萨斯!
公共无效检索组(){
GroupReF.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (final DataSnapshot ds :dataSnapshot.getChildren()){
String uid = ds.getKey();
DatabaseReference groupRef = GroupReF.child(uid).child("GroupName");
groupRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String retrieveGroupsName = dataSnapshot.getValue().toString();
Log.i(TAG,"value --------+++++++++++++" + retrieveGroupsName);
Groups groups = new Groups(retrieveGroupsName);
groupsList.clear();
groupsList.add(groups);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
public class GroupsListAdapter extends RecyclerView.Adapter<GroupsListAdapter.GroupListViewHolder> {
private final String TAG = "Groups adapter Activity";
ArrayList<Groups> groupsList;
public GroupsListAdapter(ArrayList<Groups> groupsList) {
this.groupsList = groupsList;
}
@NonNull
@Override
public GroupsListAdapter.GroupListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.display_group_layout,parent,false);
RecyclerView.LayoutParams layoutParams = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
view.setLayoutParams(layoutParams);
GroupListViewHolder groupListViewHolder = new GroupListViewHolder(view);
return groupListViewHolder;
}
@Override
public void onBindViewHolder(@NonNull GroupListViewHolder holder, int position) {
holder.groupName.setText(groupsList.get(position).getGroupName());
}
@Override
public int getItemCount() {
return (groupsList == null) ? 0 : groupsList.size();
}
public class GroupListViewHolder extends RecyclerView.ViewHolder{
public TextView groupName;
public GroupListViewHolder(@NonNull View itemView) {
super(itemView);
groupName = itemView.findViewById(R.id.display_group_name);
}
}
}
公共类组{
public String groupName;
public Groups(String groupName) {
this.groupName = groupName;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
}
解决方案
你应该像这样改变你的代码:
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
groupsList.clear();
for(DataSnapshot data : dataSnapshot.getChildren()){
String retrieveGroupsName = data.getValue(String.class);
Log.i(TAG,"value --------+++++++++++++" + retrieveGroupsName);
Groups groups = new Groups(retrieveGroupsName);
groupsList.add(groups);
}
yourAdapter.notifyDataSetChanged();
}
推荐阅读
- javascript - 我正在尝试使用 gulp 4 将值从一个任务转移到另一个任务,但是有错误
- html - 选中的获取点在teechart中
- neural-network - 如何处理NN训练过程的随机性?
- jquery - Jquery - 将默认值设置为动态生成的表单选择
- html - 当窗口宽度减小时,Div 宽度逐渐增加(带媒体查询)
- c - Windows:使用事件进行共享内存同步
- android - 必须在添加内容之前调用 requestWindowFeature()
- c# - 从套接字接收时确定可变消息长度的可靠方法
- tkinter - 如何在 Scrapy 中使用 Tkinter 或任何其他 python GUI
- wpf - 如何将输入绑定添加到 DataGrid 样式