我在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
文本和日期是两个不同的列表
问题是,我如何将日期排序为字符串(可能是?)没有文本丢失,以及我应该在哪里这样做(从db获得之后,在适配器检索数据之前?或者在适配器中加载元素后,然后将它们返回排序(看起来很糟糕)
这就是我从DB获取数据并在适配器
中检索的方式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) {
}
});
setText in AdapterClass
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);
}
});
排序数据的最佳位置是当您通过查询从db中获取数据时,但如果您想在列表中手动进行排序,则保存日期的最佳格式如下:
2021.09.10
2021.09.13
2021.09.30
2021.12.01
因为字符串排序可以应用于你的日期。要按降序对日期进行排序,只需使用:
collections.reverseorder();