diff options
Diffstat (limited to 'app/src/main/java/github/daneren2005/dsub/adapter/SectionAdapter.java')
-rw-r--r-- | app/src/main/java/github/daneren2005/dsub/adapter/SectionAdapter.java | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/app/src/main/java/github/daneren2005/dsub/adapter/SectionAdapter.java b/app/src/main/java/github/daneren2005/dsub/adapter/SectionAdapter.java index 599870d7..f57012b5 100644 --- a/app/src/main/java/github/daneren2005/dsub/adapter/SectionAdapter.java +++ b/app/src/main/java/github/daneren2005/dsub/adapter/SectionAdapter.java @@ -77,6 +77,7 @@ public abstract class SectionAdapter<T> extends RecyclerView.Adapter<UpdateViewH @Override public void onClick(View v) { T item = holder.getItem(); + updateView.onClick(); if (updateView.isCheckable()) { if (selected.contains(item)) { selected.remove(item); @@ -136,15 +137,17 @@ public abstract class SectionAdapter<T> extends RecyclerView.Adapter<UpdateViewH } int subPosition = 0; + int subHeader = 0; for(List<T> section: sections) { - if(position == subPosition) { - int index = sections.indexOf(section); - onBindHeaderHolder(holder, headers.get(index)); + boolean validHeader = headers.get(subHeader) != null; + if(position == subPosition && validHeader) { + onBindHeaderHolder(holder, headers.get(subHeader)); return; } - if(position <= (subPosition + section.size())) { - T item = section.get(position - subPosition - 1); + int headerOffset = validHeader ? 1 : 0; + if(position < (subPosition + section.size() + headerOffset)) { + T item = section.get(position - subPosition - headerOffset); onBindViewHolder(holder, item, getItemViewType(item)); if(updateView.isCheckable()) { @@ -154,7 +157,11 @@ public abstract class SectionAdapter<T> extends RecyclerView.Adapter<UpdateViewH return; } - subPosition += section.size() + 1; + subPosition += section.size(); + if(validHeader) { + subPosition += 1; + } + subHeader++; } } @@ -164,7 +171,12 @@ public abstract class SectionAdapter<T> extends RecyclerView.Adapter<UpdateViewH return sections.get(0).size(); } - int count = headers.size(); + int count = 0; + for(String header: headers) { + if(header != null) { + count++; + } + } for(List<T> section: sections) { count += section.size(); } @@ -179,16 +191,23 @@ public abstract class SectionAdapter<T> extends RecyclerView.Adapter<UpdateViewH } int subPosition = 0; + int subHeader = 0; for(List<T> section: sections) { - if(position == subPosition) { + boolean validHeader = headers.get(subHeader) != null; + if(position == subPosition && validHeader) { return VIEW_TYPE_HEADER; } - if(position <= (subPosition + section.size())) { - return getItemViewType(section.get(position - subPosition - 1)); + int headerOffset = validHeader ? 1 : 0; + if(position < (subPosition + section.size() + headerOffset)) { + return getItemViewType(section.get(position - subPosition - headerOffset)); } - subPosition += section.size() + 1; + subPosition += section.size(); + if(validHeader) { + subPosition += 1; + } + subHeader++; } return -1; |