Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 是否使用日期选择器日期更改筛选Recyclerview项?_Android_Firebase_Firebase Realtime Database_Android Recyclerview - Fatal编程技术网

Android 是否使用日期选择器日期更改筛选Recyclerview项?

Android 是否使用日期选择器日期更改筛选Recyclerview项?,android,firebase,firebase-realtime-database,android-recyclerview,Android,Firebase,Firebase Realtime Database,Android Recyclerview,这是Firebase结构,我想根据日期过滤项目,如果用户通过日期选择器选择特定日期,我想过滤项目并将其显示在回收视图中。我试过这个方法,它只对当前日期有效。如果我选择另一个日期,Recyclerview不会改变。这里出了什么问题 我的密码 dbbookingDetails=FirebaseDatabase.getInstance().getReference(“Booking”).child(currentuserID); recyclerView=findViewById(R.id.recy

这是Firebase结构,我想根据日期过滤项目,如果用户通过
日期选择器
选择特定日期,我想过滤项目并将其显示在
回收视图
中。我试过这个方法,它只对当前日期有效。如果我选择另一个日期,Recyclerview不会改变。这里出了什么问题

我的密码

dbbookingDetails=FirebaseDatabase.getInstance().getReference(“Booking”).child(currentuserID);
recyclerView=findViewById(R.id.recyclerbill);
recyclerView.setHasFixedSize(true);
progressBar=findViewById(R.id.progreebarid);
LinearLayoutManager LinearLayoutManager=新的LinearLayoutManager(此);
linearLayoutManager.setOrientation(linearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(linearLayoutManager);
mlist=新的ArrayList();
btndate.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
DialogFragment datepicker=新的DatepickerFragment();
show(getSupportFragmentManager(),“日期选择器”);
////////////////-------------///////////////////////
Calendar c=Calendar.getInstance();
int year=c.get(日历年);
int month=c.get(日历月);
int day=c.get(日历日期,每月的第天);
Calendar cal=Calendar.getInstance();
校准设置(日历年、年份);
校准设置(日历、月份、月份);
校准设置(日历、月日、日);
最终SimpleDataFormat格式=新SimpleDataFormat(“dd-MM-yyyy”);
最后一个字符串sdate=format.format(cal.getTime());
tvdate.setText(sdate);
dbbookingDetails.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
mlist.clear();
对于(DataSnapshot dataSnapshot1:DataSnapshot.getChildren())
{
BookingDetails bd=dataSnapshot1.getValue(BookingDetails.class);
if(bd.getBookingDate.equals(sdate))
{
mlist.add(bd);
}
}
madapter=新适配器\预订\详细信息(MainActivity.this,mlist);
recyclerView.setAdapter(madapter);
madapter.notifyDataSetChanged();
progressBar.setVisibility(View.INVISIBLE);
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
}
});

我想你只定义了一次适配器。然后,您需要获取适配器的实例,并通过适配器中的函数update更新数据。无论何时从服务器获取数据,都不应为回收器视图设置适配器。 另外,请确保您获取的数据正确无误。
希望这有帮助

为什么要将日期存储为字符串而不是字符串?我正在为送货服务开发此应用程序。所以我想存储日期,这对我来说很容易显示。以这种格式存储数据对排序没有用处。我不使用这些数据进行排序,它是用来计算总订单的。只需在onCreate()中定义适配器一次,然后在适配器中生成函数updateData。使用该函数updateData将从服务器获取的数据更新到recycler视图中。示例
madapter.updateData(mlist)
已完成。适配器中的函数updateData。数据是适配器中的临时列表,用于存储从activity
fun updateData(bookingDetails:list){datas.clear()datas.addAll(bookingDetails)notifyDataSetChanged()}传递的数据
  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) {

                    }
                });

            }
        });