Android 如何按日期对RecyclerView标题和项目进行排序
我无法按日期降序对回收视图进行排序。有Android 如何按日期对RecyclerView标题和项目进行排序,android,sql,sorting,android-recyclerview,Android,Sql,Sorting,Android Recyclerview,我无法按日期降序对回收视图进行排序。有标题和项目。我只能对项目进行排序,但不能对标题进行排序 我试图按降序对SQL数据库进行排序,但没有成功 `` 这是ListEvent类: public abstract class ListEvent { public static final int TYPE_HEADER = 0; public static final int TYPE_ITEM = 1; abstract public i
标题
和项目
。我只能对项目进行排序
,但不能对标题进行排序
我试图按降序对SQL数据库进行排序,但没有成功
``
这是ListEvent
类:
public abstract class ListEvent {
public static final int TYPE_HEADER = 0;
public static final int TYPE_ITEM = 1;
abstract public int getType();
}
public class HeaderEvent extends ListEvent {
private long date;
public HeaderEvent(long date) {
this.date = date;
}
public long getDate() {
return date;
}
@Override
public int getType() {
return TYPE_HEADER;
}
}
public class EventModel {
private String title;
private long date;
public EventModel(String title, long date) {
this.title = title;
this.date = date;
}
public String getTitle(){
return title;
}
public long getDate(){
return date;
}
}
这是EventItem.class
public class EventItem extends ListEvent{
private EventModel eventModel;
public EventItem(EventModel eventModel) {
this.eventModel = eventModel;
}
public EventModel getEventModel() {
return eventModel;
}
@Override
public int getType() {
return TYPE_ITEM;
}
}
这是HeaderEvent
类:
public abstract class ListEvent {
public static final int TYPE_HEADER = 0;
public static final int TYPE_ITEM = 1;
abstract public int getType();
}
public class HeaderEvent extends ListEvent {
private long date;
public HeaderEvent(long date) {
this.date = date;
}
public long getDate() {
return date;
}
@Override
public int getType() {
return TYPE_HEADER;
}
}
public class EventModel {
private String title;
private long date;
public EventModel(String title, long date) {
this.title = title;
this.date = date;
}
public String getTitle(){
return title;
}
public long getDate(){
return date;
}
}
这是我的模型-EventModel
类:
public abstract class ListEvent {
public static final int TYPE_HEADER = 0;
public static final int TYPE_ITEM = 1;
abstract public int getType();
}
public class HeaderEvent extends ListEvent {
private long date;
public HeaderEvent(long date) {
this.date = date;
}
public long getDate() {
return date;
}
@Override
public int getType() {
return TYPE_HEADER;
}
}
public class EventModel {
private String title;
private long date;
public EventModel(String title, long date) {
this.title = title;
this.date = date;
}
public String getTitle(){
return title;
}
public long getDate(){
return date;
}
}
和我的RecyclerView
适配器:
public class EventRVAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<ListEvent> items;
public EventRVAdapter(List<ListEvent> items) {
this.items = items;
}
public class ItemViewHolder extends RecyclerView.ViewHolder {
private TextView tvName, tvDate;
public ItemViewHolder(@NonNull View itemView) {
super(itemView);
tvName = itemView.findViewById(R.id.tvTitle);
tvDate = itemView.findViewById(R.id.tvDate);
}
}
public class HeaderViewHolder extends RecyclerView.ViewHolder {
private TextView tvHeaderDate;
public HeaderViewHolder(@NonNull View itemView) {
super(itemView);
tvHeaderDate = itemView.findViewById(R.id.tvHeader);
}
}
@Override
public int getItemCount() {
return items.size();
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
switch (viewType) {
case ListEvent.TYPE_HEADER: {
View itemView = inflater.inflate(R.layout.row_header, parent, false);
return new HeaderViewHolder(itemView);
}
case ListEvent.TYPE_ITEM: {
View itemView = inflater.inflate(R.layout.row_item, parent, false);
return new ItemViewHolder(itemView);
}
default:
throw new IllegalStateException("unsupported item type");
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
int viewType = getItemViewType(position);
switch (viewType) {
case ListEvent.TYPE_HEADER: {
HeaderEvent header = (HeaderEvent) items.get(position);
HeaderViewHolder headerHolder = (HeaderViewHolder) holder;
headerHolder.tvHeaderDate.setText(Utils.getDayAndTime(header.getDate()));
break;
}
case ListEvent.TYPE_ITEM: {
EventItem event = (EventItem) items.get(position);
ItemViewHolder itemHolder = (ItemViewHolder) holder;
itemHolder.tvName.setText(event.getEventModel().getTitle());
itemHolder.tvDate.setText(Utils.getDateWithoutTime(event.getEventModel().getDate()));
break;
}
default:
throw new IllegalStateException("unsupported item type");
}
}
@Override
public int getItemViewType(int position) {
return items.get(position).getType();
}
公共类EventrAdapter扩展了RecyclerView.Adapter{
私人清单项目;
公共事件适配器(列表项){
这个项目=项目;
}
公共类ItemViewHolder扩展了RecyclerView.ViewHolder{
私有文本视图tvName、tvDate;
public ItemViewHolder(@NonNull View itemView){
超级(项目视图);
tvName=itemView.findViewById(R.id.tvTitle);
tvDate=itemView.findviewbyd(R.id.tvDate);
}
}
公共类HeaderViewHolder扩展了RecyclerViewView.ViewHolder{
私有文本视图tvHeaderDate;
public HeaderViewHolder(@NonNull View itemView){
超级(项目视图);
tvHeaderDate=itemView.findViewById(R.id.tvHeader);
}
}
@凌驾
public int getItemCount(){
返回items.size();
}
@非空
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
LayoutInflater充气器=LayoutInflater.from(parent.getContext());
开关(视图类型){
案例ListEvent.TYPE_标题:{
视图项视图=充气机。充气(R.layout.row_标题,父项,false);
返回新的HeadServiceWholder(itemView);
}
case ListEvent.TYPE_项:{
视图项视图=充气机。充气(R.layout.row\u项目,父项,false);
返回新的ItemViewHolder(itemView);
}
违约:
抛出新的IllegalStateException(“不支持的项目类型”);
}
}
@凌驾
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder,int位置){
int viewType=getItemViewType(位置);
开关(视图类型){
案例ListEvent.TYPE_标题:{
HeaderEvent头=(HeaderEvent)项。获取(位置);
头架头架头架=(头架头架)支架;
headerHolder.tvHeaderDate.setText(Utils.getDayAndTime(header.getDate());
打破
}
case ListEvent.TYPE_项:{
EventItem事件=(EventItem)items.get(位置);
ItemViewHolder itemHolder=(ItemViewHolder)holder;
itemHolder.tvName.setText(event.getEventModel().getTitle());
itemHolder.tvDate.setText(Utils.getDateWithoutTime(event.getEventModel().getDate());
打破
}
违约:
抛出新的IllegalStateException(“不支持的项目类型”);
}
}
@凌驾
public int getItemViewType(int位置){
return items.get(position.getType();
}
}
您能帮我找到解决方案或提供建议吗?方法文档声明:
集合的迭代器按升序返回键
这就是你的行为
无需使用Map
来准备带有标题的项目列表。最好只是迭代已排序的事件列表并存储最后日期,以便在下一步进行比较。下面是一个代码示例:
List<EventModel> events = loadEvents();
List<ListEvent> items = new ArrayList<>();
long date = -1L;
for (EventModel event : events) {
if (event.getDate() != date) {
date = event.getDate();
items.add(new HeaderEvent(date));
}
items.add(new EventItem(event));
}
List events=loadEvents();
列表项=新建ArrayList();
长日期=-1L;
对于(EventModel事件:事件){
if(event.getDate()!=日期){
date=event.getDate();
增加(新总部事件(日期));
}
添加(新事件项(事件));
}
列数据类型?显示按要求排序的结果集-格式文本(无图像)@jarlh Column coll_DATE-long。COL_标题-文本。我更新了问题的内容。你太棒了!实际上,keySet()按升序返回键。你能就你的建议给我举个简单的例子吗?