【问题标题】:Sort and display data save in sqlite according to date through recyclerview通过recyclerview按日期排序显示sqlite中保存的数据
【发布时间】: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();
        }



    }

【问题讨论】:

    标签: java android


    【解决方案1】:

    在适配器中设置数据之前,您必须对列表进行排序

    ArrayList<Student> arraylist
                = new ArrayList<Student>();
            arraylist.add(new Student(12, "Robinson", 21));
            arraylist.add(new Student(14, "Mahi", 11));
            arraylist.add(new Student(13, "Jack", 31));
      
            Collections.sort(arraylist);
      
            for (Student str : arraylist) {
                System.out.println(str);
            }
    

    短列表后设置适配器数据

    adapter.setList(arraylist)
    

    【讨论】:

      猜你喜欢
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多