首页 > 解决方案 > 如何在 RecyclerView 中对字符串元素进行排序?

问题描述

我在 RecyclerView 中有 5 个元素(取自 DB 的元素)以及日期和文本。两个不同的列表。对于日期和字符串。一个片段包含 1 个日期和 1 个字符串文本。所以,我需要按日期对元素进行排序,就像那样

我想要的结果

text1 10.09.2021
text2 13.09.2021
text3 30.09.2021
text4 1.12.2021

我得到的结果

text3 30.09.2021
text4 1.12.2021
text1 10.09.2021
text2 13.09.2021

文本和日期是两个不同的列表

问题是,我如何将日期排序为字符串(可能是?)而不会丢失文本,以及我应该在哪里执行此操作(从数据库获取之后和在适配器中检索数据之前?或者在适配器中加载元素然后获取它们之后返回排序(看起来很糟糕)

这就是我从数据库获取数据并在适配器中检索的方式

        List<String> reminder = new ArrayList<>();
        List<String> date = new ArrayList<>();

        Calendar test = Calendar.getInstance();
        long pars = test.getTimeInMillis();
        System.out.println(pars);


        dbf.child("Reminders").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {

                reminder.clear();
                date.clear();


                for(DataSnapshot child2 : snapshot.getChildren()) { // getting a data from DB to ArrayList for dropping into Adapter

                    for(DataSnapshot tChild : child2.getChildren()) {
                        if (tChild.getKey().equals("text")) {
                            reminder.add(tChild.getValue().toString());
                            rem = reminder.toArray(new String[reminder.size()]);

                        }
                        if (tChild.getKey().equals("date")) {
                            date.add(tChild.getValue().toString());
                            dat = date.toArray(new String[date.size()]);


                        }

                    }



                    mainRowAdapter rAdapter = new mainRowAdapter(MainActivity.this, rem,dat);
                    rv.setAdapter(rAdapter);
                    rv.setLayoutManager(new LinearLayoutManager(MainActivity.this));

                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });

AdapterClass 中的 setText

        holder.reminder.setText(reminder[position]);
        holder.date.setText(date[position]);

在另一个主题中,我看到了这个,但这对我的情况没有帮助吗?可能存在一些类比吗?

Collections.sort(categories, new Comparator<Categories>() {
            @Override
            public int compare(Categories lhs, Categories rhs) {
                return lhs.title.compareTo(rhs.title);
            }
        });

标签: androidfirebasesortingandroid-recyclerview

解决方案


对数据进行排序的最佳位置是当您通过查询从 db 获取数据时,但如果您想在列表中手动进行排序,保存日期的最佳格式如下:

2021.09.10
2021.09.13
2021.09.30
2021.12.01

因为字符串排序可以应用于您的日期。要按降序对日期进行排序,您可以简单地使用:

collections.reverseorder();

推荐阅读