基础的RecyclerView Adapter封装类,支持侧边栏快速跳转,StickyHeader
- multiple type view
- at the bottom of the load more
- add WaveSideBar for quick jump list
- support snap and sticky header
- support SwipeItemView
AndroidSwipeLayout
AdapterDelegates
WaveSideBar
RecyclerItemDecoration
RecyclerViewSnap
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_multi_type);
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
GridLayoutManager manager = new GridLayoutManager(this, 2);
recyclerView.setLayoutManager(manager);
initArray();
recyclerView.setAdapter(new MultiTypeAdapter(itemArray, this));
}
private void initArray() {
itemArray = new RecyclerViewItemArray();
for (int i = 0; i < 20; i++) {
if (i % 3 == 0) {
itemArray.add(new ItemData<>(MultiTypeAdapter.TYPE_DOG, new Dog(i + "")));
} else {
itemArray.add(new ItemData<>(MultiTypeAdapter.TYPE_CAT, new Cat(i + "")));
}
}
itemArray.add(new ItemData<>(MultiTypeAdapter.TYPE_LOADING, null));
}
int count = 1;
@Override
public void onRequestMore() {
recyclerView.postDelayed(new Runnable() {
@Override
public void run() {
List<Cat> cats = new LinkedList<>();
for (int i = 0; i < 3; i++) {
cats.add(new Cat("you are my love " + i));
}
((MultiTypeAdapter) recyclerView.getAdapter()).notifyAfterLoadMore(MultiTypeAdapter.TYPE_CAT, cats, count < 3);
count++;
}
}, 2000);
}
adpter
public static final int TYPE_CAT = 1;
public static final int TYPE_DOG = 2;
public MultiTypeAdapter(RecyclerViewItemArray itemArray, LoadingDelegate.OnRequestMoreListener listener) {
super(itemArray);
delegatesManager.addDelegate(TYPE_CAT, new CatDelegate());
delegatesManager.addDelegate(TYPE_DOG, new DogDelegate());
delegatesManager.addDelegate(TYPE_LOADING, new LoadingDelegate(listener, true));
delegatesManager.addDelegate(TYPE_EMPTY, new EmptyDelegate(R.mipmap.ic_launcher));
}
StickyHeaderDecoration decoration = new StickyHeaderDecoration(StickyHeaderAdapter.TYPE_CHAPTER);
mRecyclerView.addItemDecoration(decoration);
mRecyclerView.addOnItemTouchListener(new StickyHeaderTouchListener(this, decoration, this));
mRecyclerView.setItemAnimator(new MyDefaultItemAnimator());
new GravitySnapHelper(Gravity.TOP).attachToRecyclerView(mRecyclerView);
mSideBarView.setOnTouchLetterChangeListener(new WaveSideBarView.OnTouchLetterChangeListener() {
@Override
public void onLetterChange(String letter) {
int size = mItemArray.size();
for (int i = 0; i < size; i++) {
ItemData data = mItemArray.get(i);
if (data.getDataType() == StickyHeaderAdapter.TYPE_CHAPTER) {
Chapter chapter = (Chapter) data.getData();
if (chapter.name.startsWith(letter)) {
LinearLayoutManager mLayoutManager =
(LinearLayoutManager) mRecyclerView.getLayoutManager();
mLayoutManager.scrollToPositionWithOffset(i, 0);
return;
}
}
}
}
});




