Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
captain-miao committed Aug 7, 2016
1 parent 39d8ba3 commit 237a032
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 52 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

import com.github.captain_miao.recyclerviewutils.stickyandexpandable.StickyHeaderItem;

import java.util.ArrayList;
import java.util.List;

/**
* @author YanLu
* @since 16/7/30
Expand All @@ -11,6 +14,8 @@ public class DetectionModel implements StickyHeaderItem {
public long headerId;
public boolean expanded;
public boolean parentItem;
public List<DetectionModel> childItems = new ArrayList<>();

public int categoryId;
public String category;
public String title;
Expand Down Expand Up @@ -40,4 +45,9 @@ public boolean isExpanded() {
public void setExpanded(boolean expanded) {
this.expanded = expanded;
}

@Override
public List getChildItemList() {
return childItems;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,8 @@
import android.widget.TextView;

import com.github.captain_miao.recyclerviewutils.stickyandexpandable.StickyAndExpandableRecyclerHeadersAdapter;
import com.github.captain_miao.recyclerviewutils.stickyandexpandable.StickyHeaderItem;
import com.github.learn.refreshandload.R;

import java.util.List;
import java.util.Map;


/**
* @author YanLu
Expand All @@ -23,8 +19,8 @@ public class StickyAndExpandableAdapter
extends StickyAndExpandableRecyclerHeadersAdapter<DetectionModel, StickyAndExpandableAdapter.ItemViewHolder, StickyAndExpandableAdapter.HeaderItemViewHolder> {
private static final String TAG = "VehicleDetectionAdapter";

public StickyAndExpandableAdapter(RecyclerView recyclerView, Map<? extends StickyHeaderItem, List<DetectionModel>> dataMap) {
super(recyclerView, dataMap);
public StickyAndExpandableAdapter(RecyclerView recyclerView) {
super(recyclerView);
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,7 @@
import com.github.learn.refreshandload.R;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* @author YanLu
Expand All @@ -25,7 +23,6 @@
public class StickyAndExpandableHeadersFragment extends Fragment {


private Map<DetectionModel, List<DetectionModel>> mDataMap = new HashMap<>();
private List<DetectionModel> mDataList = new ArrayList<>();
public StickyAndExpandableHeadersFragment() {
super();
Expand All @@ -45,7 +42,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa

// Set adapter populated with example dummy data
initMockData();
final StickyAndExpandableAdapter adapter = new StickyAndExpandableAdapter(recyclerView, mDataMap);
final StickyAndExpandableAdapter adapter = new StickyAndExpandableAdapter(recyclerView);
adapter.addAll(mDataList);

recyclerView.setAdapter(adapter);
Expand Down Expand Up @@ -97,10 +94,9 @@ private void initMockData() {
model.categoryId = i;
model.category = i +" Header ";
model.parentItem = true;
model.childItems.addAll(detectionVoList);

mDataList.add(model);

mDataMap.put(model, detectionVoList);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,19 @@
import com.timehop.stickyheadersrecyclerview.StickyRecyclerHeadersTouchListener;

import java.util.List;
import java.util.Map;

/**
* @author YanLu
* @since 16/7/30
*/
public abstract class StickyAndExpandableRecyclerHeadersAdapter<T, VH extends RecyclerView.ViewHolder, HEADER extends RecyclerView.ViewHolder>
public abstract class StickyAndExpandableRecyclerHeadersAdapter<T extends StickyHeaderItem, VH extends RecyclerView.ViewHolder, HEADER extends RecyclerView.ViewHolder>
extends BaseWrapperRecyclerAdapter<T, VH> implements StickyRecyclerHeadersAdapter<HEADER> {

private Map<? extends StickyHeaderItem, List<T>> mDataMap;

private StickyAndExpandableRecyclerHeadersAdapter() {
}

public StickyAndExpandableRecyclerHeadersAdapter(final RecyclerView recyclerView, Map<? extends StickyHeaderItem, List<T>> dataMap) {
this.mDataMap = dataMap;

public StickyAndExpandableRecyclerHeadersAdapter(final RecyclerView recyclerView) {
initStickyHeader(recyclerView);
}

Expand All @@ -44,25 +40,28 @@ private void initStickyHeader(final RecyclerView recyclerView) {
new StickyRecyclerHeadersTouchListener.OnHeaderClickListener() {
@Override
public void onHeaderClick(View header, int position, long headerId) {
StickyHeaderItem wrapper = getStickyHeaderWrapper(headerId);
List<T> childItemList = getChildItemList(wrapper);
if (childItemList != null) {
int childListItemCount = childItemList.size();
if (wrapper.isExpanded()) {
for (int i = childListItemCount - 1; i >= 0; i--) {
mItemList.remove(position + i + 1);
}

notifyItemRangeRemoved(position + 1, childListItemCount);
} else {
for (int i = 0; i < childListItemCount; i++) {
mItemList.add(position + i + 1, childItemList.get(i));
T item = getItem(position);
if(item != null && item.isParentItem()){
List<T> childItemList = item.getChildItemList();

if (childItemList != null) {
int childListItemCount = childItemList.size();
if (item.isExpanded()) {
for (int i = childListItemCount - 1; i >= 0; i--) {
mItemList.remove(position + i + 1);
}

notifyItemRangeRemoved(position + 1, childListItemCount);
} else {
for (int i = 0; i < childListItemCount; i++) {
mItemList.add(position + i + 1, childItemList.get(i));
}

notifyItemRangeInserted(position + 1, childListItemCount);
}

notifyItemRangeInserted(position + 1, childListItemCount);
}
item.setExpanded(!item.isExpanded());
}
wrapper.setExpanded(!wrapper.isExpanded());
}
});

Expand All @@ -75,21 +74,4 @@ public void onChanged() {

}

public List<T> getChildItemList(StickyHeaderItem wrapper){
return mDataMap != null ? mDataMap.get(wrapper) : null;
}

public StickyHeaderItem getStickyHeaderWrapper(long headerId){

StickyHeaderItem headerWrapper = null;
for(StickyHeaderItem wrapper: mDataMap.keySet()){
if(wrapper.getHeaderId() == headerId){
headerWrapper = wrapper;
break;
}
}

return headerWrapper;
}

}
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
package com.github.captain_miao.recyclerviewutils.stickyandexpandable;

import java.util.List;

/**
* @author YanLu
* @since 16/7/30
*/
public interface StickyHeaderItem {
public interface StickyHeaderItem<T extends StickyHeaderItem> {

long getHeaderId();

boolean isParentItem();

boolean isExpanded();
void setExpanded(boolean expanded);


List<T> getChildItemList();
}

0 comments on commit 237a032

Please sign in to comment.