마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

파이어베이스 데이터베이스 연동하여 참가 여부 어플 [closed]

0 추천

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>

 

진짜 그대로 따라했는데 아무것도 안뜨니 허탈합니다... ㅜㅜㅠ

질문을 종료한 이유: 끝!
익명사용자 님이 2019년 1월 20일 질문
2019년 1월 20일 closed

1개의 답변

0 추천
리스트에 데이터 추가한 부분아래에 adapter.notifyDataSetChanged()를 넣어보세요.
익명사용자 님이 2019년 1월 20일 답변
2019년 1월 20일 수정
당신은.... 도...덕...책! 3시간 고민한거 한줄로 해결되다니 ㅜㅜ 감사감사감사합니당
ㅎㅎ잼있으시네용. 참고로 질문답변으로 해결되시면 closed로 닫기보단 답변을 채택해주셔야 답변자분들도 좋아하시고, 추후에 다른분들이 검색해서 찾기도 쉽습니다
...