【发布时间】:2022-01-22 02:31:44
【问题描述】:
我的应用是一个待办事项列表应用。我正在尝试根据保存到 sqlite 数据库和数组列表中的日期对 recyclerview 中的数据进行排序。我见过有人说我可以使用比较器来做到这一点,但我不确定如何保存到我的数据库中的日期不是字符串,而是每个部分,日、月和年,并分别保存为整数和然后在显示前合并成字符串。此外,大多数通过比较器完成的排序解决方案都是静态数据,而不是来自数据库的数据,所以我不知道该怎么做。
光标代码:
db = helper.getReadableDatabase();
cursor = db.rawQuery("select * from taskRecord", null);
if(cursor.getCount()>0) {
while (cursor.moveToNext()) {
task=cursor.getString(1);
description=cursor.getString(2);
day=cursor.getInt(3);
month=cursor.getInt(4);
year=cursor.getInt(5);
hour=cursor.getInt(6);
minute=cursor.getInt(7);
taskRecord.add(new MyRecord(task, description, day, month, year, hour, minute));
回收站视图:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{
Context context;
public MyAdapter(Context context){
this.context = context;
}
@NonNull
@Override
public MyAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.tasklist,parent,false);
return new MyViewHolder(view);
}
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
Button btnShowDone;
TextView tvShowTask, tvShowDescription, tvShowTime, tvShowDate;
public MyViewHolder(@NonNull View itemView){
super(itemView);
tvShowTask = itemView.findViewById(R.id.tvTaskDisp);
tvShowTime = itemView.findViewById(R.id.tvTimeDisp);
tvShowDate = itemView.findViewById(R.id.tvDateDisp);
tvShowDescription = itemView.findViewById(R.id.tvDescDisp);
btnShowDone = itemView.findViewById(R.id.btnDone);
btnShowDone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Delete Confirmation");
builder.setMessage("Are you sure this task is done ?");
builder.setCancelable(false);
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
deleteTask(taskRecord.get(getAdapterPosition()).getTask());
taskRecord.remove(taskRecord.get(getAdapterPosition()));
notifyDataSetChanged();
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialog.dismiss();
}
});
dialog = builder.create();
dialog.show();
}
});
}
@Override
public void onClick(View view){
}
}
@Override
public void onBindViewHolder(@NonNull MyAdapter.MyViewHolder holder, int position) {
String format;
int hour = taskRecord.get(position).getHour();
if (hour == 0) {
hour += 12;
format = "AM";
} else if (hour == 12) {
format = "PM";
} else if (hour > 12) {
hour -= 12;
format = "PM";
} else {
format = "AM";
}
String minZero;
int minute = taskRecord.get(position).getMinute();
if (minute < 10){
minZero = "0";
} else if (minute > 10){
minZero = "";
}else {
minZero = "";
}
holder.tvShowTask.setText("Task: " + taskRecord.get(position).getTask());
String time = taskRecord.get(position).getHour() + ":" + minZero + taskRecord.get(position).getMinute() + " " + format;
holder.tvShowTime.setText("Time: "+ time);
String date = taskRecord.get(position).getDay() + " " + theMonth(taskRecord.get(position).getMonth()-1) + " " + taskRecord.get(position).getYear();
holder.tvShowDate.setText("Date: "+ date);
holder.tvShowDescription.setText("Description: " + taskRecord.get(position).getDescription());
}
@Override
public int getItemCount() {
return taskRecord.size();
}
public String theMonth(int month){
String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
return monthNames[month];
}
public void deleteTask(String name){
SQLiteDatabase db = helper.getWritableDatabase();
db.delete("taskRecord", "task=?", new String[]{name});
db.close();
}
}
【问题讨论】: