首页 > 解决方案 > 将 CalendarView 值与 Firebase 日期值匹配,然后在 Recycler/CardView 中显示?

问题描述

我正在尝试在另一个 SO 用户CardView的以下帮助中实现我自己的。Fragment我认为我所做的一切都是正确的,但是我没有看到预期的结果,并认为故障出在其他地方..

我所拥有的是CalendarView在 a 内Fragment显示所选日期的TextViewusing setOnDateChangeListener。然后我有一个隐藏RecyclerView的,其中有一个,如果日期与存储在我的 Firebase 数据库中的日期匹配CardView,我试图调用它。我还在吗?CalendarView

我正在创建一个活动时间表,使用一个包含活动名称、日期、时间、描述的表单,所有这些都存储为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());
            }
        });


    }

标签: javaandroidfirebasefirebase-realtime-databasedatepicker

解决方案


推荐阅读