Раскрашивается только первый cardview recyclerview

Я создал приложение в Android Studio, используя CardViews в RecyclerView в связи с базой данных Firebase Realtime, в которой пользователь может проверить свою посещаемость, чтобы, если пользователь приехал в праздничный день (R, G, суббота или воскресенье), CardView был окрашен. Но в моем коде окрашивается только первый CardView. Я проверил через операторы журнала, что он проходит через операторы if-else как R, так и G.

Мой код:

public class frag2ofAttendanceNew extends Fragment {

String mPinFromFrag1ofAttendance;
String yearf1;
String monthf1;


private RecyclerView mRecyclerView;
DatabaseReference myRef;
DatabaseReference holidaysRef;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    Log.d("abcd","oncreate view reached");
    final View v= inflater.inflate(R.layout.fragment_frag2of_attendance_new, container, false);
    Log.d("abcd","oncreate view reached and layout inflated");
    mRecyclerView = (RecyclerView)v.findViewById(R.id.recycler_view);
    return v;
}

@Override
public void onStart(){
    super.onStart();
    Log.d("abcd","onstart reached");
    Bundle b = getArguments();
    if(b!=null){
        mPinFromFrag1ofAttendance = b.getString("mPinToFrag2ofAttendance");
        Log.d("abcd","Receiving from frag1ofAttendance");
        yearf1 = b.getString("year");
        monthf1 = b.getString("month");
    }
    Log.d("abcd",mPinFromFrag1ofAttendance);
myRef = FirebaseDatabase.getInstance().getReference().child("Attendance_Records").child(mPinFromFrag1ofAttendance).child(yearf1).child(monthf1);

LinearLayoutManager layoutManager = new LinearLayoutManager(getContext(),LinearLayoutManager.VERTICAL,false);
    mRecyclerView.setLayoutManager(layoutManager);
    //mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    Log.d("abcd","setlayoutmanager");

    FirebaseRecyclerOptions options = new FirebaseRecyclerOptions.Builder<Attendance_Records>().setQuery(myRef,Attendance_Records.class).build();
    Log.d("abcd","recycleroptions reached");

    FirebaseRecyclerAdapter<Attendance_Records,AttendanceViewHolder> adapter =
            new FirebaseRecyclerAdapter<Attendance_Records, AttendanceViewHolder>
                    (options) {

            @NonNull
                @Override
                public AttendanceViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                    Log.d("abcd","oncreateviewholder reached");
                    view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card,parent,false);
                    Log.d("abcd","cardview inflated");
                    return new AttendanceViewHolder(view);
                }

                @Override
                protected void onBindViewHolder(AttendanceViewHolder holder, int position, Attendance_Records model) {

                    holidaysRef=FirebaseDatabase.getInstance().getReference().child("Holidays");
                    final String userdate = model.getDate();

                    try {
                        Log.d("abcd","StringTodate about to be called");
                        StringToDate(userdate);
                    } catch (ParseException e) {
                        e.printStackTrace();
                    }

                    holidaysRef.addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(final DataSnapshot dataSnapshot) {
                            if(dataSnapshot.child(userdate).exists()){
                                Log.d("abcd","date matched");
                       final DatabaseReference tilldateRef = holidaysRef.child(userdate);
                                tilldateRef.addListenerForSingleValueEvent(new ValueEventListener() {
                                    @Override
                                    public void onDataChange(DataSnapshot dataSnapshot1) {
                                        if(dataSnapshot1.child("G").exists()){
                                            Log.d("abcd","its G");
                                            CardView cv = getView().findViewById(R.id.card_view);
                                            Log.d("abcd","cardview found");
                                            cv.setCardBackgroundColor(Color.CYAN);
                                            Log.d("abcd","changed cv color");
                                        }
                                        else if(dataSnapshot1.child("R").exists()){
                                            Log.d("abcd","its R");
                                            CardView cv = getView().findViewById(R.id.card_view);
                                            Log.d("abcd","cardview found");
                                            cv.setCardBackgroundColor(Color.MAGENTA);
                                            Log.d("abcd","changed cv color");
                                        }
                                        else if(day==7){
                                            Log.d("abcd","its Saturday");
                                            CardView cv = getView().findViewById(R.id.card_view);
                                            Log.d("abcd","cardview found");
                                            cv.setCardBackgroundColor(Color.GRAY);
                                            Log.d("abcd","changed cv color");
                                        }
                                        else if(day==1){
                                            Log.d("abcd","its Sunday");
                                            CardView cv = getView().findViewById(R.id.card_view);
                                            Log.d("abcd","cardview found");
                                            cv.setCardBackgroundColor(Color.DKGRAY);
                                            Log.d("abcd","changed cv color");
                                        }


                                        else{
                                            Log.d("abcd","None from G,R or Weekend");
                                        }
                                    }

                                    @Override
                                    public void onCancelled(DatabaseError databaseError) {

                                    }
                                });
                            }
                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }
                    });

                    holder.setYear(model.getYear());
                    holder.setMonth(model.getMonth());
                    holder.setDate(model.getDate());
                    holder.setIntime(model.getInTime());
                    holder.setOuttime(model.getOutTime());
                    holder.setStatus(model.getStatus());
                    holder.setEntrydate(model.getEntryDate());
                    holder.setMyid(model.getMyID());
                    Log.d("abcd","onbindviewholder reached");
                }
    };

    mRecyclerView.setAdapter(adapter);
    adapter.startListening();

}

private void StringToDate(String date) throws ParseException{
    Log.d("abcd","StringtoDate reached");
    DateFormat formatter = null;
    Date convertedDate = null;

    formatter = new SimpleDateFormat("dd-MM-yyyy");
    convertedDate = (Date)formatter.parse(date);
    Log.d("abcd","date converted");

    Calendar c = Calendar.getInstance();
    Log.d("abcd","Calendar getInstance reached");
    c.setTime(convertedDate);
    Log.d("abcd","userdate set in Calendar");
    day = c.get(Calendar.DAY_OF_WEEK);
    Log.d("abcd","day of week is "+day);
}

public class AttendanceViewHolder extends RecyclerView.ViewHolder{
    TextView vhyear, vhmonth, vhdate, vhintime, vhouttime, vhentrydate, vhstatus, vhmyid;
    public AttendanceViewHolder(View itemView){
        super(itemView);
        Log.d("abcd","attendanceviewholder reached");
        vhyear = itemView.findViewById(R.id.year);
        vhmonth = itemView.findViewById(R.id.month);
        vhdate = itemView.findViewById(R.id.date);
        vhintime = itemView.findViewById(R.id.inTime);
        vhouttime = itemView.findViewById(R.id.outTime);
        vhentrydate = itemView.findViewById(R.id.entryDate);
        vhstatus = itemView.findViewById(R.id.status);
        vhmyid = itemView.findViewById(R.id.userId);
        Log.d("abcd","textviews found");

    }

    public void setYear(String year) {
        Log.d("abcd","setyear reached");
        vhyear.setText(year);
        Log.d("abcd",vhyear.getText().toString());
    }

    public void setMonth(String month) {
        Log.d("abcd","setmonth reached");
        vhmonth.setText(month);
    }

    public void setDate(String date) {
        Log.d("abcd","setdate reached");
        vhdate.setText(date);
    }

    public void setIntime(String inTime) {
        Log.d("abcd","setintime reached");
        vhintime.setText(inTime);
    }

    public void setOuttime(String outTime) {
        Log.d("abcd","setouttime reached");
        vhouttime.setText(outTime);
    }

    public void setEntrydate(String entrydate){
        Log.d("abcd","setentrydate reached");
        vhentrydate.setText(entrydate);
    }

    public void setStatus(String status){
        Log.d("abcd","setstatus reached");
        vhstatus.setText(status);
    }

    public void setMyid(String myid){
        Log.d("abcd","setmyid reached");
        vhmyid.setText(myid);
    }
}

}

Таблица My Attendance_Records

Мой праздничный стол

ОБНОВИТЬ

Я добился праздников в таблице праздников, но все еще не могу раскрасить выходные. Должен ли я поставить эти условия в другое место?

1
0
90
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны определить CardView в ViewHolder:

    CardView cv;

        public AttendanceViewHolder(View itemView){
            super(itemView);
                Log.d("abcd","attendanceviewholder reached");
                vhyear = itemView.findViewById(R.id.year);
                cv = itemView.findViewById(R.id.card_view);
    ...
        } 

Затем используйте

holder.cv.setCardBackgroundColor(Color.CYAN);

вместо

CardView cv = getView().findViewById(R.id.card_view);
Log.d("abcd","cardview found");
cv.setCardBackgroundColor(Color.CYAN);

Спасибо! Это сработало! Праздники R и G становятся цветными, но выходные не окрашиваются и даже не проверяются, следует ли мне перенести это условие в другое место?

Dpka 12.04.2018 07:13

Нет, программа до них не доходит

Dpka 16.04.2018 06:26

Вы видите журнал «день недели ---»?

Belzebub 19.04.2018 15:43

Да, и вы можете сказать мне, правильно ли я использую день? Нет. на субботу и воскресенье?

Dpka 20.04.2018 07:00

Предпочтительно использовать Calendar.SUNDAY, Calendar.SATURDAY и т. Д., Но кажется, что числа верны, проверьте свою базу данных

Belzebub 30.04.2018 12:14

Я понял! Пришлось определять «если-то еще» по выходным отдельно.

Dpka 03.05.2018 12:19

Другие вопросы по теме