title: How to implement RecyclerView with section header depending on category?
body: <p>I want to implement sections in my list. I have a list of tasks. List has a custom adapter which extends recyclerview swipe adapter as I have implemented swipe gesture to the recyclerview.  </p>
  
  <p>So now tasks list is shown together with completed and pending tasks. Each list item has a check box which shows task is completed or pending.</p>
  
  <p>If check box is checked then task is completed and vise versa. Now I want to make two sections in this with header. One For completed tasks and another for pending tasks. </p>
  
  <p>So completed tasks should be shown inside completed section and vise versa. Also if the task is unchecked i.e pending and if user checks the check box then the item should get removed from the pending section and should get added to the completed section and vise versa.</p>
  
  <p>I checked with one library for sections. </p>
  
  <p><a href="https://github.com/afollestad/sectioned-recyclerview" rel="noreferrer">https://github.com/afollestad/sectioned-recyclerview</a></p>
  
  <p>But when I tried to implement the library I got the error that adapter can not extend two classes as I have extended recyclerview swipe library before. </p>
  
  <p>Adapter :</p>
  
  <pre><code>    public class IAdapter extends RecyclerSwipeAdapter&lt;IAdapter.ItemViewHolder&gt; {
  
      public ArrayList&lt;Task&gt; items;
      Context conext;
      public int _mId;
  
      List&lt;Task&gt; itemsPendingRemoval = new ArrayList&lt;&gt;();
  
      public IAdapter(Context context, ArrayList&lt;Task&gt; item) {
          this.conext=context;
         this.items=item;
      }
  
  
      @Override
      public int getItemCount() {
          return items.size();
  
      }
  
      public static class ItemViewHolder extends RecyclerView.ViewHolder {
          Task task;
          CheckBox cb;
          SwipeLayout swipeLayout;
          TaskTableHelper taskTableHelper;
          ItemViewHolder(final View itemView) {
              super(itemView);
  
              taskTableHelper= new TaskTableHelper(itemView.getContext());
              swipeLayout = (SwipeLayout) itemView.findViewById(R.id.swipe);
              cb = (CheckBox) itemView.findViewById(R.id.checkbox);
  
          }
      }
  
      @Override
      public void onBindViewHolder(final ItemViewHolder itemViewHolder,final int i) {
  
          itemViewHolder.cb.setText(items.get(i).getTitle());
  
          itemViewHolder.task = items.get(i);
  
          int taskId = itemViewHolder.task.getId();
  
          itemViewHolder.task = itemViewHolder.taskTableHelper.getTask(taskId);
  
          int status = itemViewHolder.task.getStatus();
  
          if(status == 0)
          {
              itemViewHolder.cb.setTextColor(Color.WHITE);
          }
  
          else {
  
              itemViewHolder.cb.setChecked(true);
  
              itemViewHolder.cb.setTextColor(Color.parseColor("#B0BEC5"));
  
          }
  
  
         itemViewHolder.cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
              @Override
              public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
  
                  if (isChecked) {
  
                      itemViewHolder.cb.setTextColor(Color.parseColor("#B0BEC5"));
  
                      itemViewHolder.task.setStatus(1);
  
                      itemViewHolder.taskTableHelper.updateStatus(itemViewHolder.task);
  
                  }
                  else
  
                  {
  
                      itemViewHolder.cb.setTextColor(Color.WHITE);
  
                      itemViewHolder.task.setStatus(0);
  
                      itemViewHolder.taskTableHelper.updateStatus(itemViewHolder.task);
  
                  }
  
              }
  
          });
  
  
  
          final Task item = items.get(i);
          itemViewHolder.swipeLayout.addDrag(SwipeLayout.DragEdge.Right,itemViewHolder.swipeLayout.findViewById(R.id.bottom_wrapper_2));
          itemViewHolder.swipeLayout.setShowMode(SwipeLayout.ShowMode.LayDown);
  
          itemViewHolder.swipeLayout.setOnDoubleClickListener(new SwipeLayout.DoubleClickListener() {
              @Override
              public void onDoubleClick(SwipeLayout layout, boolean surface) {
                  Toast.makeText(conext, "DoubleClick", Toast.LENGTH_SHORT).show();
              }
          });
          itemViewHolder.swipeLayout.findViewById(R.id.trash2).setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  mItemManger.removeShownLayouts(itemViewHolder.swipeLayout);
                  items.remove(i);
                  notifyItemRemoved(i);
                  notifyItemRangeChanged(i, items.size());
                  mItemManger.closeAllItems();
  
                  itemViewHolder.taskTableHelper.deleteTask(item);
  
                  _mId = item.getAlertId();
  
                  cancelNotification();
  
                  Toast.makeText(view.getContext(), "Deleted " + itemViewHolder.cb.getText().toString() + "!", Toast.LENGTH_SHORT).show();
              }
          });
  
          itemViewHolder.swipeLayout.findViewById(R.id.done).setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
  
                  itemViewHolder.task.setStatus(1);
                  itemViewHolder.taskTableHelper.updateStatus(itemViewHolder.task);
                  itemViewHolder.cb.setChecked(true);
                  Toast.makeText(conext, "Task Completed.", Toast.LENGTH_SHORT).show();
              }
          });
  
          itemViewHolder.swipeLayout.getSurfaceView().setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
  
                  boolean mEditMode;
  
                  int id = item.getId();
                  int priority = item.getTaskPriority();
                  String title = item.getTitle();
                  String alertDate = item.getAlertDate();
                  String alertTime = item.getAlertTime();
                  String dueDate = item.getDueDate();
                  String dueTime = item.getDueTime();
                  _mId = item.getAlertId();
  
                  int listId = item.getList();
  
                  mEditMode = true;
  
                  Intent i = new Intent(conext, AddTaskActivity.class);
  
                  i.putExtra("taskId", id);
                  i.putExtra("taskTitle", title);
                  i.putExtra("taskPriority", priority);
                  i.putExtra("taskAlertTime", alertTime);
                  i.putExtra("taskAlertDate", alertDate);
                  i.putExtra("taskDueDate", dueDate);
                  i.putExtra("taskDueTime", dueTime);
                  i.putExtra("taskListId", listId);
                  i.putExtra("EditMode", mEditMode);
                  i.putExtra("AlertId",_mId);
  
                  conext.startActivity(i);
  
              }
          });
  
  
          mItemManger.bindView(itemViewHolder.itemView, i);
  
      }
  
      @Override
      public ItemViewHolder onCreateViewHolder(ViewGroup viewGroup,int position) {
  
              View itemView = LayoutInflater.
                      from(viewGroup.getContext()).
                      inflate(R.layout.card_layout, viewGroup, false);
              return new ItemViewHolder(itemView);
  
      }
  
  
  
          @Override
      public void onAttachedToRecyclerView(RecyclerView recyclerView) {
          super.onAttachedToRecyclerView(recyclerView);
      }
  
  
      public void remove(int position) {
         Task item = items.get(position);
          if (itemsPendingRemoval.contains(item)) {
              itemsPendingRemoval.remove(item);
          }
          if (items.contains(item)) {
              items.remove(position);
              notifyItemRemoved(position);
          }
      }
  
      public void cancelNotification()
      {
          AlarmManager alarmManager = (AlarmManager)conext.getSystemService(Context.ALARM_SERVICE);
          Intent intent = new Intent(conext, NotificationReceiver.class);
          PendingIntent pendingIntent = PendingIntent.getBroadcast(conext,_mId, intent, 0);
          alarmManager.cancel(pendingIntent);
      }
      @Override
      public int getSwipeLayoutResourceId(int position) {
          return R.id.swipe;
      }
  }
  </code></pre>
  
  <p>EDIT: </p>
  
  <p>onBindViewHolder method after extending sectionedRecyclerview adapter:</p>
  
  <pre><code> @Override
  public void onBindViewHolder(ItemViewHolder itemViewHolder, int section, int i, int absolutePosition) {
  
      itemViewHolder.cb.setText(items.get(i).getTitle());
  
      itemViewHolder.task = items.get(i);
  
      int taskId = itemViewHolder.task.getId();
  
      itemViewHolder.task = itemViewHolder.taskTableHelper.getTask(taskId);
  
      int status = itemViewHolder.task.getStatus();
  
      if(status == 0)
      {
          itemViewHolder.cb.setTextColor(Color.WHITE);
      }
  
      else {
  
          itemViewHolder.cb.setChecked(true);
  
          itemViewHolder.cb.setTextColor(Color.parseColor("#B0BEC5"));
  
      }
  
  
     itemViewHolder.cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
          @Override
          public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
  
              if (isChecked) {
  
                  itemViewHolder.cb.setTextColor(Color.parseColor("#B0BEC5"));
  
                  itemViewHolder.task.setStatus(1);
  
                  itemViewHolder.taskTableHelper.updateStatus(itemViewHolder.task);
  
              }
              else
  
              {
  
                  itemViewHolder.cb.setTextColor(Color.WHITE);
  
                  itemViewHolder.task.setStatus(0);
  
                  itemViewHolder.taskTableHelper.updateStatus(itemViewHolder.task);
  
              }
  
          }
  
      });
  
  
  
      final Task item = items.get(i);
      itemViewHolder.swipeLayout.addDrag(SwipeLayout.DragEdge.Right,itemViewHolder.swipeLayout.findViewById(R.id.bottom_wrapper_2));
      itemViewHolder.swipeLayout.setShowMode(SwipeLayout.ShowMode.LayDown);
  
      itemViewHolder.swipeLayout.setOnDoubleClickListener(new SwipeLayout.DoubleClickListener() {
          @Override
          public void onDoubleClick(SwipeLayout layout, boolean surface) {
              Toast.makeText(conext, "DoubleClick", Toast.LENGTH_SHORT).show();
          }
      });
      itemViewHolder.swipeLayout.findViewById(R.id.trash2).setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View view) {
              mItemManger.removeShownLayouts(itemViewHolder.swipeLayout);
              items.remove(i);
              notifyItemRemoved(i);
              notifyItemRangeChanged(i, items.size());
              mItemManger.closeAllItems();
  
              itemViewHolder.taskTableHelper.deleteTask(item);
  
              _mId = item.getAlertId();
  
              cancelNotification();
  
              Toast.makeText(view.getContext(), "Deleted " + itemViewHolder.cb.getText().toString() + "!", Toast.LENGTH_SHORT).show();
          }
      });
  
      itemViewHolder.swipeLayout.findViewById(R.id.done).setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
  
              itemViewHolder.task.setStatus(1);
              itemViewHolder.taskTableHelper.updateStatus(itemViewHolder.task);
              itemViewHolder.cb.setChecked(true);
              Toast.makeText(conext, "Task Completed.", Toast.LENGTH_SHORT).show();
          }
      });
  
      itemViewHolder.swipeLayout.getSurfaceView().setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
  
              boolean mEditMode;
  
              int id = item.getId();
              int priority = item.getTaskPriority();
              String title = item.getTitle();
              String alertDate = item.getAlertDate();
              String alertTime = item.getAlertTime();
              String dueDate = item.getDueDate();
              String dueTime = item.getDueTime();
              _mId = item.getAlertId();
  
              int listId = item.getList();
  
              mEditMode = true;
  
              Intent i = new Intent(conext, AddTaskActivity.class);
  
              i.putExtra("taskId", id);
              i.putExtra("taskTitle", title);
              i.putExtra("taskPriority", priority);
              i.putExtra("taskAlertTime", alertTime);
              i.putExtra("taskAlertDate", alertDate);
              i.putExtra("taskDueDate", dueDate);
              i.putExtra("taskDueTime", dueTime);
              i.putExtra("taskListId", listId);
              i.putExtra("EditMode", mEditMode);
              i.putExtra("AlertId",_mId);
  
              conext.startActivity(i);
  
          }
      });
  
  
      mItemManger.bindView(itemViewHolder.itemView, i);
  
  }
  </code></pre>
  
  <p>How can I do this? Can anyone help with this please? </p>
  
  <p>Thank you..</p>