Android 如何根据日期和时间对我的RecyclerView进行排序
如图所示,我的列表没有按日期和时间排序 回收视图图像 这是我的firebase结构 火基图像 Add Appointment.java->这是我将数据添加到firebase的方式 ViewAppointment.java->这是我显示我的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; 专用数据库参考数据
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);