通过几个属性对RecyclerView元素进行分组

问题描述

我有一个RecyclerView,其中填充了“事件”类的元素。该类具有日期和重要性之类的参数。 现在,RecyclerView中的所有事件都将像这样显示。 我想按日期分别显示事件,也想按重要性分别显示事件。我将附上一张图片显示我的意思。 我读到要进行分隔(例如,按日期),您需要制作一个单独的适配器和一个Viewholder。问题-如果要按重要性拆分同一数据阵列,是否需要创建另一个适配器? 假设我要选择一种分组方法。我该怎么办?在何处?

Example

我的第一个RecyclerViewAdapter事件

public class EventAdapter extends RecyclerView.Adapter<EventAdapter.EventViewHolder> {
    private static final String TAG = "myLogs";
    private List<Event> mEventList;
    final SparseBooleanArray selectedItems = new SparseBooleanArray();
    private int currentSelectedPos;

public List<Event> getEvents(){
    return mEventList;
}

private EventAdapterListener itemClickListener;

public interface EventAdapterListener {
    void onItemClick(int position);
    void onItemLongClick(int position);
}

public void setListener(EventAdapterListener listener){
        itemClickListener = listener;
}


private OnItemCheckedListener OnItemChecked;
public interface OnItemCheckedListener {
    void onItemChecked(int position,boolean isImportant);
}

public void setonItemCheckedListener (OnItemCheckedListener listener){
    OnItemChecked = listener;
}


public static class EventViewHolder extends RecyclerView.ViewHolder{
   public TextView TVtitle;
   public TextView TVcomment;
   public CheckBox CBimportance;
   public TextView TVdate;


   //public EventViewHolder(@NonNull View itemView,final EventAdapterListener listener) {
   public EventViewHolder(@NonNull View itemView) {
       super(itemView);
       TVtitle = itemView.findViewById(R.id.tvTitle);
       TVcomment = itemView.findViewById(R.id.tvComment);
       CBimportance = itemView.findViewById(R.id.cbIconImportant);
       TVdate = itemView.findViewById(R.id.tvDate);



   }

}

public void removeItem(int position) {
    mEventList.remove(position);
    notifyItemRemoved(position);
    notifyItemRangeChanged(position,mEventList.size());
}

private static DateFormatSymbols myDateFormatSymbols = new DateFormatSymbols(){

    @Override
    public String[] getMonths() {
        return new String[]{"января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"};
    }

};



 public EventAdapter(ArrayList<Event> listEvent){
        mEventList = listEvent;
   }

@NonNull
@Override
public EventViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
   View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_cardview,parent,false);
    //LayoutInflater inflater = LayoutInflater.from(parent.getContext());
   //if (viewType == Constants.VIEWTYPE_GROUP){
       //ViewGroup group = (ViewGroup) inflater.inflate(R.layout.group_layout,false);
       //GroupViewHolder
   //}

   return new EventViewHolder(v);
}

@Override
public void onBindViewHolder(@NonNull EventViewHolder holder,final int position) {
    final Event item = mEventList.get(position);

    holder.TVtitle.setText(item.getName());
    holder.TVcomment.setText(item.getComment());
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd MMMM",myDateFormatSymbols);
    holder.TVdate.setText(simpleDateFormat.format(item.getDate()));

    holder.CBimportance.setonCheckedchangelistener(null);

    holder.CBimportance.setChecked(item.getImportant());

    holder.CBimportance.setonCheckedchangelistener(new CompoundButton.OnCheckedchangelistener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton,boolean b) {
            item.IsImportant = b;
            OnItemChecked.onItemChecked(position,b);
        }
    });



    holder.itemView.setonClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (selectedItems.size() > 0 && itemClickListener != null){
                itemClickListener.onItemClick(position);
            }
        }
    });

    holder.itemView.setonLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View view) {
            if (itemClickListener != null){
                itemClickListener.onItemLongClick(position);
            }
            return true;
        }
    });

    if (currentSelectedPos == position) currentSelectedPos = -1;


}

@Override
public int getItemCount() {
    return mEventList.size();
}

void deleteEvents(){
    List<Event> events = new ArrayList<>();
    for (Event event : mEventList){
        if (event.getSelected())
            events.add(event);
    }

    mEventList.removeAll(events);
    notifyDataSetChanged();
    currentSelectedPos = -1;
}

void toggleSelection(int position) {
    currentSelectedPos = position;
    if (selectedItems.get(position)) {
        selectedItems.delete(position);
        mEventList.get(position).setSelected(false);
    } else {
        selectedItems.put(position,true);
        mEventList.get(position).setSelected(true);
    }
    notifyItemChanged(position);
}}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)