Фильтровать элементы Recyclerview, используя средства выбора даты? - PullRequest
0 голосов
/ 04 апреля 2020

Это структура Firebase. Я хочу фильтровать элементы в соответствии с датой. Если пользователь выбирает указанную дату c через Date picker, я хочу фильтровать элементы и отображать ее в Recyclerview. Я попробовал этот метод, он работает только на текущую дату. Если я выберу другую дату, Recyclerview не изменится. Что здесь пошло не так?

structure

Мой пробный код

  dbbookingDetails=FirebaseDatabase.getInstance().getReference("Booking").child(currentuserID);

        recyclerView=findViewById(R.id.recyclerbill);
        recyclerView.setHasFixedSize(true);
        progressBar=findViewById(R.id.progreebarid);

        LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(linearLayoutManager);

        mlist=new ArrayList<>();

        btndate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                DialogFragment datepicker=new DatepickerFragment();
                datepicker.show(getSupportFragmentManager()," date picker");

                ////////////////-------------///////////////////////
                Calendar c=Calendar.getInstance();
                int year=c.get(Calendar.YEAR);
                int month=c.get(Calendar.MONTH);
                int day=c.get(Calendar.DAY_OF_MONTH);

                Calendar cal=Calendar.getInstance();
                cal.set(Calendar.YEAR,year);
                cal.set(Calendar.MONTH,month);
                cal.set(Calendar.DAY_OF_MONTH,day);

                final SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy");

                 final String  sdate = format.format(cal.getTime());

                tvdate.setText(sdate);

                dbbookingDetails.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        mlist.clear();
                        for(DataSnapshot dataSnapshot1:dataSnapshot.getChildren())
                        {
                            BookingDetails bd=dataSnapshot1.getValue(BookingDetails.class);
                            if(bd.getBookingDate.equals(sdate))
                            {
                                mlist.add(bd);
                            }

                        }

                        madapter=new Adapter_booking_details(MainActivity.this,mlist);
                        recyclerView.setAdapter(madapter);

                        madapter.notifyDataSetChanged();
                        progressBar.setVisibility(View.INVISIBLE);

                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {

                    }
                });

            }
        });

1 Ответ

1 голос
/ 04 апреля 2020

Я думаю, вы просто определяете адаптер только один раз. Затем вам нужно получить экземпляр адаптера и обновить данные через функцию обновления в адаптере. Не следует устанавливать адаптер для просмотра в любое время, когда вы получаете данные с сервера. Дополнительно убедитесь, что выбранные вами данные верны. Надеюсь, что это поможет!

...