title: How to sort items in RecyclerView depending on a Date
body: <p><a href="https://i.stack.imgur.com/vR2xo.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/vR2xo.png" alt="enter image description here"></a></p>
  
  <p>This is what my screen should look like. </p>
  
  <p>I added this library <a href="https://github.com/ShamylZakariya/StickyHeaders" rel="nofollow noreferrer">https://github.com/ShamylZakariya/StickyHeaders</a> and tried to do it in similar way.</p>
  
  <p>My model looks like this:</p>
  
  <p>public class Transaction {</p>
  
  <pre><code>private int id;
  private Date createdDate;
  private String description;
  private int amount;
  private float newCredits;
  }
  </code></pre>
  
  <p>and </p>
  
  <pre><code>public class Transactions {
  
  private int totalCount;
  private List&lt;Transaction&gt; transactions = new ArrayList&lt;&gt;();
  }
  </code></pre>
  
  <p>So after i fetch all my transactions I set the data in adapter.. this is what my adapter looks like:</p>
  
  <pre><code>public class WalletAdapter extends SectioningAdapter {
  
  private static final boolean USE_DEBUG_APPEARANCE = false;
  
  private Transactions transactions;
  private List&lt;Section&gt; sections = new ArrayList&lt;&gt;();
  
  public WalletAdapter() {
  }
  
  private class Section {
      String alpha;
      Transactions transactions;
  }
  
  public Transactions getTransactions() {
      return transactions;
  }
  
  public void setTransactions(Transactions transactions) {
      this.transactions = transactions;
      sections.clear();
  
      char alpha = 0;
  
      Section currentSection = null;
      for (Transaction transaction : transactions.getTransactions()) {
          String date = parseDate(transaction.getCreatedDate());
          if (date.charAt(0) != alpha) {
              if (currentSection != null) {
                  sections.add(currentSection);
              }
  
              currentSection = new Section();
              alpha = date.charAt(0);
              currentSection.alpha = String.valueOf(alpha);
          }
  
          if (currentSection != null) {
              currentSection.transactions = this.transactions;
          }
      }
  
      sections.add(currentSection);
      notifyAllSectionsDataSetChanged();
  }
  
  private String parseDate(Date date) {
      DateFormat df = new SimpleDateFormat("dd.MM.yyyy", Locale.getDefault());
      String formattedDate = "";
      formattedDate = df.format(date);
      return formattedDate;
  }
  
  @Override
  public int getNumberOfSections() {
      return sections.size();
  }
  
  @Override
  public boolean doesSectionHaveHeader(int sectionIndex) {
      return true;
  }
  
  @Override
  public boolean doesSectionHaveFooter(int sectionIndex) {
      return false;
  }
  
  @Override
  public int getNumberOfItemsInSection(int sectionIndex) {
      return sections.get(sectionIndex).transactions.getTransactions().size();
  }
  
  @Override
  public ItemViewHolder onCreateItemViewHolder(ViewGroup parent, int itemUserType) {
      LayoutInflater inflater = LayoutInflater.from(parent.getContext());
      View v = inflater.inflate(R.layout.wallet_item, parent, false);
      return new ItemViewHolder(v);
  }
  
  @Override
  public HeaderViewHolder onCreateHeaderViewHolder(ViewGroup parent, int headerUserType) {
      LayoutInflater inflater = LayoutInflater.from(parent.getContext());
      View v = inflater.inflate(R.layout.wallet_header, parent, false);
      return new HeaderViewHolder(v);
  }
  
  @Override
  public void onBindItemViewHolder(SectioningAdapter.ItemViewHolder viewHolder, int sectionIndex, int itemIndex, int itemType) {
      Section section = sections.get(sectionIndex);
      ItemViewHolder holder = (ItemViewHolder) viewHolder;
      Transaction transaction = section.transactions.getTransactions().get(itemIndex);
      holder.description.setText(transaction.getDescription());
      holder.ammount.setText(String.valueOf(transaction.getAmount()));
      holder.time.setText(parseDate(transaction.getCreatedDate()));
      holder.total.setText(String.valueOf(transaction.getNewCredits()));
  
  }
  
  @Override
  public void onBindHeaderViewHolder(SectioningAdapter.HeaderViewHolder viewHolder, int sectionIndex, int headerType) {
      Section s = sections.get(sectionIndex);
      HeaderViewHolder hvh = (HeaderViewHolder) viewHolder;
      Transaction transaction = s.transactions.getTransactions().get(sectionIndex);
      if (USE_DEBUG_APPEARANCE) {
          hvh.itemView.setBackgroundColor(0x55ffffff);
          hvh.dateHeader.setText(pad(sectionIndex * 2) + s.alpha);
      } else {
          hvh.dateHeader.setText(parseDate(transaction.getCreatedDate()));
      }
  }
  
  private String pad(int spaces) {
      StringBuilder b = new StringBuilder();
      for (int i = 0; i &lt; spaces; i++) {
          b.append(' ');
      }
      return b.toString();
  }
  
  
  public class HeaderViewHolder extends SectioningAdapter.HeaderViewHolder {
  
      TextView dateHeader;
  
      public HeaderViewHolder(View itemView) {
          super(itemView);
          dateHeader = (TextView) itemView.findViewById(R.id.date);
      }
  }
  
  public class ItemViewHolder extends SectioningAdapter.ItemViewHolder {
  
      TextView description;
      TextView time;
      TextView ammount;
      TextView total;
  
      public ItemViewHolder(View itemView) {
          super(itemView);
          description = (TextView) itemView.findViewById(R.id.description);
          time = (TextView) itemView.findViewById(R.id.time);
          ammount = (TextView) itemView.findViewById(R.id.ammount);
          total = (TextView) itemView.findViewById(R.id.new_credits);
      }
  }
  </code></pre>
  
  <p>}</p>
  
  <p>So if I do it this way, It sorts and creates headers/sections by date, but it puts all transactions in all sections, not inside matching date...</p>