+ List<BaseTemplateItem> itemList = new ArrayList<>();
+
+ boolean reachedFallbackItems = false;
+
+ for (TemplateHeader item : newList) {
+ if (!reachedFallbackItems && item.isFallback()) {
+ itemList.add(new TemplateDivider());
+ reachedFallbackItems = true;
+ }
+ itemList.add(new TemplateItem(item));
+ }
+
+ listDiffer.submitList(itemList);
+ }
+ public BaseTemplateItem getItem(int position) {
+ return listDiffer.getCurrentList()
+ .get(position);
+ }
+
+ static abstract class BaseTemplateItem {
+ abstract long getId();
+
+ abstract boolean equals(BaseTemplateItem other);
+ }
+
+ static class TemplateItem extends BaseTemplateItem {
+ final TemplateHeader template;
+ TemplateItem(TemplateHeader template) {this.template = template;}
+ @Override
+ long getId() {
+ return template.getId();
+ }
+ @Override
+ boolean equals(BaseTemplateItem other) {
+ return template.equals(((TemplateItem) other).template);
+ }
+ }
+
+ static class TemplateDivider extends BaseTemplateItem {
+ @Override
+ long getId() {
+ return -1;
+ }
+ @Override
+ boolean equals(BaseTemplateItem other) {
+ return true;
+ }