Android 如何根据日期和时间对我的RecyclerView进行排序

Android 如何根据日期和时间对我的RecyclerView进行排序,android,sorting,firebase,android-recyclerview,firebase-realtime-database,Android,Sorting,Firebase,Android Recyclerview,Firebase Realtime Database,如图所示,我的列表没有按日期和时间排序 回收视图图像 这是我的firebase结构 火基图像 Add Appointment.java->这是我将数据添加到firebase的方式 ViewAppointment.java->这是我显示我的recyclerview的方式 public class ViewAppointment扩展了AppCompative活动{ 私有FirebaseAuth FirebaseAuth; 私有FirebaseUser mCurrentUser; 专用数据库参考数据

如图所示,我的列表没有按日期和时间排序

回收视图图像 这是我的firebase结构

火基图像

Add Appointment.java->这是我将数据添加到firebase的方式

ViewAppointment.java->这是我显示我的recyclerview的方式

public class ViewAppointment扩展了AppCompative活动{
私有FirebaseAuth FirebaseAuth;
私有FirebaseUser mCurrentUser;
专用数据库参考数据库;
私人回收站;
私人FirebaseRecyclerAdapter mAdapter;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u view\u约会);
recyclerView=(recyclerView)findViewById(R.id.recycle);
recyclerView.setLayoutManager(新的LinearLayoutManager(本));
firebaseAuth=firebaseAuth.getInstance();
mCurrentUser=firebaseAuth.getCurrentUser();
db=FirebaseDatabase.getInstance().getReference().child(“电子邮件”).child(mCurrentUser.getUid()).child(“约会”);
db.keepSynced(真);
mAdapter=新的FirebaseRecyclerAdapter(
AppointmentData.class,R.layout.model,myViewHolder.class,db
) {
@凌驾
受保护的void populateViewHolder(最终myViewHolder viewHolder、最终任命数据模型、最终int位置){
viewHolder.nameTxt.setText(model.getName());
viewHolder.dateApp.setText(model.getDate());
viewHolder.timeApp.setText(model.getTime());
viewHolder.mapBtn.setText(“地图”);
viewHolder.detailBtn.setText(“细节”);
viewHolder.deleteBtn.setText(“删除”);
viewHolder.editbn.setText(“编辑”);
Log.e(“myFirebase UID”,mAdapter.getRef(position.getKey());
viewHolder.editBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Intent i=新的Intent(view.getContext(),updateapoint.class);
i、 putExtra(“NAME_KEY”,model.getName());
i、 putExtra(“ADDRESS_KEY”,model.getAddress());
i、 putExtra(“TEL_KEY”,model.getTel());
i、 putExtra(“DATE_KEY”,model.getDate());
i、 putExtra(“TIME_KEY”,model.getTime());
view.getContext().startActivity(i);
Log.e(“项目点击位置”,“位置+位置”);
mAdapter.getRef(+position).removeValue();
}
});
viewHolder.detailBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
意图i=新意图(view.getContext(),DetailActivity.class);
i、 putExtra(“NAME_KEY”,model.getName());
i、 putExtra(“ADDRESS_KEY”,model.getAddress());
i、 putExtra(“TEL_KEY”,model.getTel());
i、 putExtra(“DATE_KEY”,model.getDate());
i、 putExtra(“TIME_KEY”,model.getTime());
view.getContext().startActivity(i);
}
});
viewHolder.mapBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Intent i=新的Intent(view.getContext(),Distance.class);
i、 putExtra(“ADDRESS_KEY”,model.getAddress());
view.getContext().startActivity(i);
}
});
viewHolder.deleteBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Log.e(“项目点击位置”,“位置+位置”);
mAdapter.getRef(+position).removeValue();
}
});
}
};
recyclerView.setAdapter(mAdapter);
}
公共静态类myViewHolder扩展了RecyclerView.ViewHolder{
私有文本视图名称TXT、dateApp、timeApp;
私有按钮详细信息BTN、映射BTN、删除BTN、编辑BTN;
公共myViewHolder(查看项目视图){
超级(项目视图);
nameTxt=(TextView)itemView.findViewById(R.id.nameTxt);
dateApp=(TextView)itemView.findViewById(R.id.dateAppointment);
timeApp=(TextView)itemView.findViewById(R.id.timeAppointment);
mapBtn=(按钮)itemView.findViewById(R.id.mapBtn);
detailBtn=(按钮)itemView.findViewById(R.id.detailBtn);
deleteBtn=(按钮)itemView.findViewById(R.id.deleteBtn);
editBtn=(按钮)itemView.findViewById(R.id.editBtn);
}
}
}

这是可以解决您问题的示例

//上面我有毫秒格式的存储日期

 ref.child("date").addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                ArrayList<Long> d = new ArrayList<>();
                for (DataSnapshot child : dataSnapshot.getChildren()) {
                  // save all millis in array list you can take your Bean class also
                    try {
                        long daa = Long.parseLong(child.getValue().toString());
                        d.add(daa);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
             // sort array list you can use comparator if you have bean class
                Collections.sort(d);
                for (int i = 0; i < d.size(); i++) {
                    String dateString = new SimpleDateFormat("dd-MM-yyyy").format(new Date(d.get(i)));
                    Log.e("!_@@ date", dateString + "");
                }
            }

        @Override
        public void onCancelled(FirebaseError firebaseError) {
            Log.e("!!__: ", "onCancelled ", firebaseError.toException());
        }
    });
ref.child(“日期”).addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
ArrayList d=新的ArrayList();
对于(DataSnapshot子项:DataSnapshot.getChildren()){
//保存数组列表中的所有毫秒,您也可以使用Bean类
试一试{
long daa=long.parseLong(child.getValue().toString());
d、 添加(daa);
}捕获(例外e){
e、 printStackTrace();
}
}
//排序数组列表若你们有bean类,你们可以使用comparator
收集.分类(d);
对于(int i=0;i    public class AppointmentData {

    private String name,tel,address,time,date;

    public AppointmentData() {
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public AppointmentData(String name, String tel, String address, String time, String date) {
        this.name=name;
        this.tel=tel;
        this.address=address;
        this.time=time;
        this.date=date;
    }

    public String getName() {
        return name;
    }

    public String getTel() {
        return tel;
    }

    public String getAddress() {
        return address;
    }

    public String getDate() {
        return date;
    }

    public String getTime() {
        return time;
    }

}
 public class ViewAppointment extends AppCompatActivity {

    private FirebaseAuth firebaseAuth;
    private FirebaseUser mCurrentUser;
    private DatabaseReference db;
    private RecyclerView recyclerView;
    private FirebaseRecyclerAdapter<AppointmentData,myViewHolder> mAdapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_appointment);


        recyclerView=(RecyclerView)findViewById(R.id.recycle);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        firebaseAuth = FirebaseAuth.getInstance();

        mCurrentUser = firebaseAuth.getCurrentUser();
        db= FirebaseDatabase.getInstance().getReference().child("Email").child(mCurrentUser.getUid()).child("Appointment");
        db.keepSynced(true);
        mAdapter= new FirebaseRecyclerAdapter<AppointmentData, myViewHolder>(

                AppointmentData.class,R.layout.model,myViewHolder.class,db
        ) {


            @Override
            protected void populateViewHolder(final myViewHolder viewHolder, final AppointmentData model, final int position) {
                viewHolder.nameTxt.setText(model.getName());
                viewHolder.dateApp.setText(model.getDate());
                viewHolder.timeApp.setText(model.getTime());
                viewHolder.mapBtn.setText("Map");
                viewHolder.detailBtn.setText("Detail");
                viewHolder.deleteBtn.setText("Delete");
                viewHolder.editBtn.setText("Edit");
                Log.e("myFirebase UID", mAdapter.getRef(position).getKey());
                viewHolder.editBtn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Intent i = new Intent (view.getContext(), UpdateAppointment.class);
                        i.putExtra("NAME_KEY",model.getName());
                        i.putExtra("ADDRESS_KEY",model.getAddress());
                        i.putExtra("TEL_KEY",model.getTel());
                        i.putExtra("DATE_KEY",model.getDate());
                        i.putExtra("TIME_KEY",model.getTime());
                        view.getContext().startActivity(i);
                        Log.e("Item Click position",""+position);
                        mAdapter.getRef(+position).removeValue();
                    }
                });
                viewHolder.detailBtn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Intent i = new Intent (view.getContext(), DetailActivity.class);
                        i.putExtra("NAME_KEY",model.getName());
                        i.putExtra("ADDRESS_KEY",model.getAddress());
                        i.putExtra("TEL_KEY",model.getTel());
                        i.putExtra("DATE_KEY",model.getDate());
                        i.putExtra("TIME_KEY",model.getTime());
                        view.getContext().startActivity(i);
                    }
                });
                viewHolder.mapBtn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Intent i = new Intent (view.getContext(), Distance.class);
                        i.putExtra("ADDRESS_KEY",model.getAddress());
                        view.getContext().startActivity(i);
                    }
                });
                viewHolder.deleteBtn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Log.e("Item Click position",""+position);
                        mAdapter.getRef(+position).removeValue();
                    }
                });
            }
        };
        recyclerView.setAdapter(mAdapter);

    }
    public static class myViewHolder extends RecyclerView.ViewHolder{
        private TextView nameTxt,dateApp,timeApp;
        private Button detailBtn,mapBtn,deleteBtn,editBtn;

        public myViewHolder(View itemView){
            super(itemView);
            nameTxt=(TextView)itemView.findViewById(R.id.nameTxt);
            dateApp= (TextView) itemView.findViewById(R.id.dateAppointment);
            timeApp=(TextView)itemView.findViewById(R.id.timeAppointment);
            mapBtn = (Button) itemView.findViewById(R.id.mapBtn);
            detailBtn = (Button) itemView.findViewById(R.id.detailBtn);
            deleteBtn = (Button) itemView.findViewById(R.id.deleteBtn);
            editBtn = (Button) itemView.findViewById(R.id.editBtn);
        }
    }


}
 ref.child("date").addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                ArrayList<Long> d = new ArrayList<>();
                for (DataSnapshot child : dataSnapshot.getChildren()) {
                  // save all millis in array list you can take your Bean class also
                    try {
                        long daa = Long.parseLong(child.getValue().toString());
                        d.add(daa);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
             // sort array list you can use comparator if you have bean class
                Collections.sort(d);
                for (int i = 0; i < d.size(); i++) {
                    String dateString = new SimpleDateFormat("dd-MM-yyyy").format(new Date(d.get(i)));
                    Log.e("!_@@ date", dateString + "");
                }
            }

        @Override
        public void onCancelled(FirebaseError firebaseError) {
            Log.e("!!__: ", "onCancelled ", firebaseError.toException());
        }
    });
public class AppointmentData {
  // ...
  private Object date;
  // ...
  public void setDate(Object date) {
      this.date = date;
  }
  // ...
  public AppointmentData(String name, String tel, String address, String time, Object date) {
      // ...
  }
  // ...    
  public Object getDate() {
      return date;
  }
}
Query db = FirebaseDatabase.getInstance().getReference().child("Email").child(mCurrentUser.getUid()).child("Appointment").orderByChild("date");
public static String timestampToDateString(long timestamp){
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
    Date date = new Date(timestamp);
    return dateFormat.format(date);
}
    final String key = FirebaseDatabase.getInstance().getReference().child("Email").child(mCurrentUser.getUid()).child("Appointment").push().getKey();

    // ...
    Long date = mSelectedDate;
    // ...
    AppointmentData appointmentData = new AppointmentData(name, tel, address, time, date);

    FirebaseDatabase.getInstance().getReference().child("Email").child(mCurrentUser.getUid()).child("Appointment").child(key).setValue(appointmentData);
    // ...
private long mSelectedDate;
    // ...
    mYear = c.get(Calendar.YEAR);
    // ...
    mSelectedDate = fieldToTimestamp(mYear, mMonth, mDay);
// ...
mSelectedDate = fieldToTimestamp(year, monthOfYear, dayOfMonth);
private long fieldToTimestamp(int year, int month, int day) {
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.YEAR, year);
    calendar.set(Calendar.MONTH, month);
    calendar.set(Calendar.DAY_OF_MONTH, day);
    return (long) (calendar.getTimeInMillis() / 1000L);
}
public String getrandoumUID(){

    Calendar cr = Calendar.getInstance();
    SimpleDateFormat sdfr = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
    Date todayr = cr.getTime();
    String dater = sdfr.format(todayr);

    return dater;
}
ArrayList.add(0,item);
adapter.notifyDataSetChanged();
    recyclerView = findViewById(R.id.recyclerView);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(Activity.this));
    ArrayList= new ArrayList<>();
    adapter = new Adapter(Activity.this,ArrayList);
    recyclerView.setAdapter(adapter);