Java 所有内容都返回到一个列表中
我目前遇到一个问题,即所有内容都返回到同一个列表。我知道这是因为我将所有内容添加到同一个数组中。但如何将它们添加到特定的位置,如我的firebase中的位置Java 所有内容都返回到一个列表中,java,firebase,android-studio,Java,Firebase,Android Studio,我目前遇到一个问题,即所有内容都返回到同一个列表。我知道这是因为我将所有内容添加到同一个数组中。但如何将它们添加到特定的位置,如我的firebase中的位置 public class GroupAdp extends RecyclerView.Adapter<GroupAdp.ViewHolder> { //Initialize activities and array list private Activity activity; ArrayList<
public class GroupAdp extends RecyclerView.Adapter<GroupAdp.ViewHolder> {
//Initialize activities and array list
private Activity activity;
ArrayList<String> arrayListGroup;
MemberAdp adapterMember;
//Create constructor
GroupAdp(Activity activity,ArrayList<String> arrayListGroup){
this.activity = activity;
this.arrayListGroup = arrayListGroup;
// notifyDataSetChanged();
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_row_group,parent,false);
return new GroupAdp.ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
//Set group name on TextView
holder.tvName.setText(arrayListGroup.get(position));
//Initialize member ArrayList
ArrayList<String> arrayListMember = new ArrayList<>();
//Using for loop to add multiple members
// for (int i=1; i<=6; i++){
// arrayListMember.add("Member " + i);
// }
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Course_ID_Section");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
String UID = user.getUid();
for (DataSnapshot courseSnapshot: snapshot.getChildren()) {
for (DataSnapshot userSnapshot: courseSnapshot.getChildren()) {
// arrayListMember.add(userSnapshot.getValue(String.class));
if(UID.equals(userSnapshot.getKey())) {
arrayListMember.add(userSnapshot.getValue(String.class));
}
}
}
adapterMember.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
//Initialize member adapter
adapterMember = new MemberAdp(arrayListMember);
//Initialize layout manager
LinearLayoutManager layoutManagerMember = new LinearLayoutManager(activity);
//Set layout manager
holder.rvMember.setLayoutManager(layoutManagerMember);
//Set adapter
holder.rvMember.setAdapter(adapterMember);
}
@Override
public int getItemCount() {
return arrayListGroup.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
//Initialize variable
TextView tvName;
RecyclerView rvMember;
public ViewHolder(@NonNull View itemView) {
super(itemView);
//Assign variable
tvName = itemView.findViewById(R.id.tv_name);
rvMember = itemView.findViewById(R.id.rv_member);
}
}
}
公共类GroupAdp扩展了RecyclerView.Adapter{
//初始化活动和数组列表
私人活动;
ArrayList ArrayList组;
成员ADP适配器成员;
//创建构造函数
GroupAdp(活动活动,ArrayList ArrayList组){
这个。活动=活动;
this.arrayListGroup=arrayListGroup;
//notifyDataSetChanged();
}
@非空
@凌驾
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType){
View=LayoutInflater.from(parent.getContext())
.充气(右布局列表行组,父级,假);
返回新的组ADP.ViewHolder(视图);
}
@凌驾
public void onBindViewHolder(@NonNull ViewHolder,int位置){
//在TextView上设置组名
holder.tvName.setText(arrayListGroup.get(position));
//初始化成员ArrayList
ArrayList arrayListMember=新的ArrayList();
//使用for循环添加多个成员
//对于(int i=1;i问题是您订阅了数据的根课程ID\u部分
,因此您以相同的方式获取所有数据,而不考虑其课程ID。有几种方法可以处理它,但在您的情况下,我建议如下:
将学生存储在哈希表(或另一个关联数组实现)或新的课程类中,而不是存储在同一数组arrayListMember
中。然后,在行arrayListMember.add(userSnapshot.getValue(String.class))中循环课程时,填写新的数据结构
,因为此时您有一个关于学生的数据,courseSnapshot
可以获取课程名称
public class HealthAlertActivity2 extends Fragment {
//Initialize variable
RecyclerView rvGroup;
ArrayList<String> arrayListGroup;
LinearLayoutManager layoutManagerGroup;
GroupAdp adapterGroup;
//@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View healthAlertFragment = inflater.inflate(R.layout.healthalert_activity2, container, false);
//Assign variable
rvGroup = healthAlertFragment.findViewById(R.id.rv_group);
//Using for loop to add multiple group
//Used for dummy display for now
// for (int i= 1; i<=6; i++){
// arrayListGroup.add("Group " + i);
// }
ArrayList<String> arrayListGroup = new ArrayList<>();
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Course_ID_Section");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
String UID = user.getUid();
Map<String, Object> map = (Map<String, Object>) snapshot.getValue();
Log.e("LOG_TAG", "Value:" + map);
assert map != null;
for (Map.Entry<String, Object> entry : map.entrySet()) {
Log.e("The Result", entry.getKey());
arrayListGroup.add(entry.getKey());
}
adapterGroup.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Log.e("LOG_TAG", "Failed to read value.", error.toException());
}
});
//Initialize group adapter
adapterGroup = new GroupAdp(getActivity(), arrayListGroup);
//Initialize layout manager
layoutManagerGroup = new LinearLayoutManager(getActivity());
//Set layout manager
rvGroup.setLayoutManager(layoutManagerGroup);
//Set adapter
rvGroup.setAdapter(adapterGroup);
return healthAlertFragment;
}
}
public class MemberAdp extends RecyclerView.Adapter<MemberAdp.ViewHolder> {
//Initialize ArrayList
ArrayList<String> arrayListMember;
//Create constructor
public MemberAdp(ArrayList<String> arrayListMember) {
this.arrayListMember = arrayListMember;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//Initialize view
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_row_member,parent,false);
return new MemberAdp.ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
//Set member name on TextView
holder.tvName.setText(arrayListMember.get(position));
}
@Override
public int getItemCount() {
return arrayListMember.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
//Initialize variable
TextView tvName;
public ViewHolder(@NonNull View itemView) {
super(itemView);
//Assign variable
tvName = itemView.findViewById(R.id.tv_name);
}
}
}