Сопоставьте значение CalendarView со значением даты Firebase, а затем отобразите в Recycler/CardView?

# #java #android #firebase #firebase-realtime-database #datepicker

Вопрос:

Я пытаюсь реализовать свой собственный CardView в Fragment следующей предыдущей справке от другого пользователя SO. Я думаю, что все сделал правильно, однако я не вижу ожидаемых результатов и думаю, что вина в другом..

То, что у меня есть, — это a CalendarView внутри a Fragment , которое отображает выбранную дату внутри TextView использования setOnDateChangeListener . Затем у меня есть скрытый RecyclerView CardView , в котором есть a, который я пытаюсь вызвать, если CalendarView дата совпадает с датой, хранящейся в моей базе данных Firebase.. Все еще со мной?

Я создаю расписание событий, используя форму, в которой есть название события, дата, время, описание , все сохраненные как strings , см. Ниже:

введите описание изображения здесь

Я понятия не имею, как получить push() значение при обращении к моей базе данных, поэтому на данный момент я просто использовал имя события для удобства..

Вот что у меня есть, это немного повсюду, так как я тестировал здесь и там, но, пожалуйста, дайте мне знать, если у вас есть вопросы.. Я попытался разделить ссылки на мою базу данных, чтобы использовать их в разных областях, но это тоже не сработало.

     @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_schedule, container, false);

        intentEvent = getActivity().getIntent().getStringExtra("name");

        // ------------- firebase --------------
        firebaseAuth = FirebaseAuth.getInstance();
        currentUser = firebaseAuth.getCurrentUser();
        uid = currentUser.getUid();
        databaseReference = FirebaseDatabase.getInstance().getReference("user").child(uid).child("dogs").child(intentEvent);
        eventReference = databaseReference.child("events");
        dateRef = eventReference.child("date");
        // -------------------------------------

        calendarView = view.findViewById(R.id.calendarView);
        scheduleTitle = view.findViewById(R.id.scheduleTitle);
        noEventPlaceholder = view.findViewById(R.id.noEventPlaceholder);
        addNewEvent = view.findViewById(R.id.addNewEvent);
        eventRecycler = view.findViewById(R.id.eventRecycler);

        eventRecycler.setVisibility(View.GONE);

        eventLayoutManager = new LinearLayoutManager(getContext());
        eventRecycler.setLayoutManager(eventLayoutManager);

        FirebaseRecyclerOptions<Event> options
                = new FirebaseRecyclerOptions.Builder<Event>()
                .setQuery(databaseReference, Event.class)
                .build();

        eventAdapter = new EventAdapter(options, new EventAdapter.EventCallback() {
            @Override
            public void onCardViewClick(Event event) {
                // view event in full?
            }
        });

        if (eventReference == null) {
            addNewEvent.setVisibility(View.VISIBLE);
            noEventPlaceholder.setText("Nothing planned for today.. Let's go walkies!");
        } else {
            eventRecycler.setVisibility(View.VISIBLE);
        }

        eventRecycler.setAdapter(eventAdapter);

        getEventData();
        dog = new Dog();

        calendarView
                .setOnDateChangeListener(
                        new CalendarView
                                .OnDateChangeListener() {
                            @Override
                            public void onSelectedDayChange(
                                    @NonNull CalendarView view,
                                    int year,
                                    int month,
                                    int dayOfMonth)
                            {

                                String date
                                        = dayOfMonth   "-"
                                          (month   1)   "-"   year;

                                scheduleTitle.setText(date);


                            }
                        });

        // this is an example of what i am trying to do..

        if (String.valueOf(dateRef).equals(scheduleTitle)) {
            eventRecycler.setVisibility(View.VISIBLE);
            noEventPlaceholder.setText("Nothing planned for today.. Let's go walkies!");
        }
        // ---------------------------------------------

        addNewEvent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                databaseReference.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {

                        String name = dataSnapshot.child("name").getValue(String.class);

                        Intent intentEventForm = new Intent(getContext(), EventForm.class);
                        intentEventForm.putExtra("name", name);
                        startActivity(intentEventForm);

                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                        Log.w("TAG", "onCancelled", databaseError.toException());
                    }
                });

            }
        });

        return view;
    }

    public void getEventData() {

        eventReference.addValueEventListener(new ValueEventListener() {

            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                String eventName = dataSnapshot.child("name").getValue(String.class);
                String eventDate = dataSnapshot.child("date").getValue(String.class);
                String eventTime = dataSnapshot.child("time").getValue(String.class);
                String eventDescription = dataSnapshot.child("description").getValue(String.class);

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                Log.w("TAG", "onCancelled", databaseError.toException());
            }
        });


    }
 

Комментарии:

1. Если я вас правильно понял, вам нужно сравнить разные типы. С java это невозможно, и вам нужно привести дату к одному типу. Это возможно с SimpleDateFormat Calendar Date помощью классов или или

2. О, хорошо! В этом есть смысл.. Я действительно делал это раньше в другом занятии, глупый я..

3. Не уверен, можно ли использовать это с помощью onDateChangeListener, но вам нужно будет изучить это

4. У onDateChangeListener вас есть год, месяц и день. То же самое вы получаете по date стоимости от Firebase