1. 파이어베이스 실시간 데이터베이스에 명단을 다 작성해 놓았습니다.
2. db에서 명단을 불러와 이름+체크박스 형태로 리사이클러뷰에 넣습니다.
문제점은 리사이클러뷰에 아무것도 들어가지 않는 것입니다.
updateRecyclerView.setHasFixedSize(true);
updateRecyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
final ArrayList<attendInfo> attendInfos = new ArrayList<>();
//전체 명단 db 불러와서 recyclerView에 넣기
for(int i = 15; i <= 18; i++) {
mFirebaseReference.child("명단").child(String.valueOf(i)).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot j : dataSnapshot.getChildren()) {
String name = j.getValue(String.class);
attendInfos.add(new attendInfo(name, false));
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(getApplicationContext(), "onCancelled()", Toast.LENGTH_LONG).show();
}
});
}
//-------------------------------------------------------------------------------------------------------
updateAdapter adapter = new updateAdapter(attendInfos);
updateRecyclerView.setAdapter(adapter);
------ 위까지는 아무 이상이 없습니다.
토스트메세지로 Firebase Database에 접근하여 잘 받아와 지는 지, attendInfos에 객체가 잘 들어갔는 지 모두 확인해 본 결과 이상이 없었습니다.
인터넷 보고 어댑터를 작성해서 어댑터 또한 이상이 없지만 올려 드리겠습니다.
public static class updateAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static class MyViewHolder extends RecyclerView.ViewHolder {
TextView nameText;
CheckBox attendCheckbox;
MyViewHolder(View view){
super(view);
nameText = view.findViewById(R.id.nameText);
attendCheckbox = view.findViewById(R.id.attendCheckbox);
}
}
private ArrayList<attendInfo> InfoArrayList;
public updateAdapter(ArrayList<attendInfo> InfoArrayList){
this.InfoArrayList = InfoArrayList;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.event_attendence_item2, parent, false);
return new MyViewHolder(v);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
MyViewHolder myViewHolder = (MyViewHolder) holder;
myViewHolder.nameText.setText(InfoArrayList.get(position).getName());
myViewHolder.attendCheckbox.setChecked(InfoArrayList.get(position).isCheck());
}
@Override
public int getItemCount() {
return InfoArrayList.size();
}
}
그리고 arrayList에 들어갈 객체입니다.
private class attendInfo {
private String name;
private boolean check;
public attendInfo(){}
public attendInfo(String name, boolean check) {
this.name = name;
this.check = check;
}
public String getName() {
return name;
}
public boolean isCheck() {
return check;
}
}
혹시나 item.xml에 문제가 있는 걸까요?
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginVertical="2dp"
android:orientation="horizontal"
android:paddingLeft="10dp"
android:paddingRight="10dp">
<TextView
android:id="@+id/nameText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="5"
android:gravity="center"
android:textSize="20dp"
tools:text="15홍길동" />
<CheckBox
android:id="@+id/attendCheckbox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:scaleX="2.0"
android:scaleY="2.0" />
</LinearLayout>
진짜 그대로 따라했는데 아무것도 안뜨니 허탈합니다... ㅜㅜㅠ