一个使用LinearLayoutManager为RecyclerViews加上section headers效果的列表控件,支持横向和纵向。
运行效果:
使用说明:
主要有三个类:StickyRecyclerHeadersAdapter, StickyRecyclerHeadersDecoration, 和StickyRecyclerHeadersTouchListener.
StickyRecyclerHeadersAdapter
的使用非常接近于 RecyclerView.Adapter
,建议让你的 RecyclerView.Adapter
实现 StickyRecyclerHeadersAdapter
,StickyRecyclerHeadersAdapter
接口如下:
1
2
3
4
5
6
|
public interface StickyRecyclerHeadersAdapter<VH extends RecyclerView.ViewHolder> {
public long getHeaderId(int position);
public VH onCreateHeaderViewHolder(ViewGroup parent);
public void onBindHeaderViewHolder(VH holder, int position);
public int getItemCount();
}
|
StickyRecyclerHeadersDecoration是整个效果的关键,但你并不需要额外的配置,下面是在activity中使用它的例子:
1
2
3
4
5
|
mRecyclerView = (RecyclerView) findViewById(R.id.recyclerview);
mAdapter =
new
MyStickyRecyclerHeadersAdapter();
mRecyclerView.setAdapter(mAdapter);
mRecyclerView.setLayoutManager(
new
LinearLayoutManager(context));
mRecyclerView.addItemDecoration(
new
StickyRecyclerHeadersDecoration(mAdapter));
|
StickyRecyclerHeadersTouchListener
是section头部被点击的事件的监听者,使用如下:
1
2
3
4
5
6
7
8
9
10
11
|
StickyRecyclerHeadersTouchListener touchListener =
new
StickyRecyclerHeadersTouchListener(recyclerView, headersDecor);
touchListener.setOnHeaderClickListener(
new
StickyRecyclerHeadersTouchListener.OnHeaderClickListener() {
@Override
public void onHeaderClick(View header, int position, long headerId) {
Toast.makeText(MainActivity.
this
,
"Header position: "
+ position +
", id: "
+ headerId,
Toast.LENGTH_SHORT).show();
}
});
mRecyclerView.addOnItemTouchListener(touchListener);
|