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()按升序返回键。你能就你的建议给我举个简单的例子吗?