1.导包
compile 'com.android.support:recyclerview-v7:26.1.0'
加依赖
链接:https://pan.baidu.com/s/1i4UfbRv 密码:kumc
2.在主布局中写RecyclerView控件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="comqq.example.hasee.myapplication.MainActivity">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rv" />
</LinearLayout>
3.再分别创建3个布局 分别是 head 头部 zhongjian中间 footer脚部 每一个布局里面有一个TextView控件
4.创建和上面3个对应的类或class文件 为了分清楚和布局取相同的名字
5.head类里面的代码
public class head extends RecyclerView.ViewHolder {
private TextView head_tv1;
private Context co;
public head(View itemView, Context co) {
super(itemView);
this.co = co;
}
public head(View itemView) {
super(itemView);
//实例化头的控件
head_tv1=itemView.findViewById(R.id.head_tv1);
}
public void render(String text){
//创建这个方法主要给头控件赋值
head_tv1.setText(text);
}
}
6.中间类的代码
public class zhongjian extends RecyclerView.ViewHolder {
private TextView zhongjian_tv1;
private Context co;
public zhongjian(View itemView, Context co) {
super(itemView);
this.co = co;
}
public zhongjian(View itemView) {
super(itemView);
//实例化中间的控件
zhongjian_tv1=itemView.findViewById(R.id.zhongjian_tv1);
}
public void render(String text){
//创建这个方法主要给中间的控件赋值
zhongjian_tv1.setText(text);
}
}
7.脚部的代码
public class footer extends RecyclerView.ViewHolder {
private TextView footer_tv1;
private Context co;
public footer(View itemView, Context co) {
super(itemView);
this.co = co;
}
public footer(View itemView) {
super(itemView);
//实例化脚部的控件
footer_tv1=itemView.findViewById(R.id.footer_tv1);
}
public void render(String text){
//创建这个方法主要给中间的控件赋值
footer_tv1.setText(text);
}
}
8.上面的三个类都主要是实例化控件和赋值 操作都是一样的
然后在创建一个类Coun实例化刚才那三个类 主要给那三个类传需要的参数
public class Coun extends SectionedRecyclerViewAdapter<head,zhongjian,footer> {
private Context co;
private List<String> titlelist;
private List<String> onelist;
private List<String> twolist;
private List<String> threelist;
private List<String> fourlist;
private List<String> fivelist;
public Coun(Context co, List<String> titlelist, List<String> onelist, List<String> twolist, List<String> threelist, List<String> fourlist, List<String> fivelist) {
this.co = co;
this.titlelist = titlelist;
this.onelist = onelist;
this.twolist = twolist;
this.threelist = threelist;
this.fourlist = fourlist;
this.fivelist = fivelist;
}
//表示有几个head
@Override
protected int getSectionCount() {
return titlelist.size();
}
//表示第几个中间的数量
@Override
protected int getItemCountForSection(int section) {
int count=0;
switch (section){
case 0:
count = onelist.size();
break;
case 1:
count = twolist.size();
break;
case 2:
count = threelist.size();
break;
case 3:
count = fourlist.size();
break;
case 4:
count = fivelist.size();
break;
}
return count;
}
//返回true表示含有脚视图
@Override
protected boolean hasFooterInSection(int section) {
return true;
}
//绑定head布局
@Override
protected head onCreateSectionHeaderViewHolder(ViewGroup parent, int viewType) {
View inflate = LayoutInflater.from(co).inflate(R.layout.head, parent, false);
return new head(inflate);
}
//绑定zhongjian布局
@Override
protected footer onCreateSectionFooterViewHolder(ViewGroup parent, int viewType) {
View inflate = LayoutInflater.from(co).inflate(R.layout.footer, parent, false);
return new footer(inflate);
}
//绑定footer布局
@Override
protected zhongjian onCreateItemViewHolder(ViewGroup parent, int viewType) {
View inflate = LayoutInflater.from(co).inflate(R.layout.zhongjian, parent, false);
return new zhongjian(inflate);
}
//向head传值
@Override
protected void onBindSectionHeaderViewHolder(head holder, int section) {
holder.render(titlelist.get(section));
}
//向footer传值
@Override
protected void onBindSectionFooterViewHolder(footer holder, int section) {
}
@Override
protected void onBindItemViewHolder(zhongjian holder, final int section, final int position) {
//对传入的数据进行判断
List<String> list = new ArrayList<>();
switch (section){
case 0:
list.addAll(onelist);
break;
case 1:
list.addAll(twolist);
break;
case 2:
list.addAll(threelist);
break;
case 3:
list.addAll(fourlist);
break;
case 4:
list.addAll(fivelist);
break;
}
holder.render(""+list.get(position));
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mOnHolderClickListener != null) {
mOnHolderClickListener.onHolderClick(view,section, position);
}
}
});
}
//这下面写的都是为了点击事件所写的接口
private OnHolderClickListener mOnHolderClickListener;
public interface OnHolderClickListener {
void onHolderClick(View view, int section, int position);
}
public void setOnHolderClickListener(OnHolderClickListener listener) {
mOnHolderClickListener = listener;
}
}
9.最后需要在主函数里面写咯
public class MainActivity extends AppCompatActivity {
private Toolbar toolbar;
private RecyclerView recy;
private List<String> titlelist;
private List<String> onelist;
private List<String> twolist;
private List<String> threelist;
private List<String> fourlist;
private List<String> fivelist;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar=findViewById(R.id.toolbar);
recy=findViewById(R.id.recy);
initView();
Coun cou = new Coun(this,titlelist,onelist,twolist,threelist,fourlist,fivelist);
GridLayoutManager grid = new GridLayoutManager(this, 4);
//设置列的宽度
SectionedSpanSizeLookup se = new SectionedSpanSizeLookup(cou, grid);
grid.setSpanSizeLookup(se);
//设置布局管理器
recy.setLayoutManager(grid);
//并设置适配器
recy.setAdapter(cou);
cou.setOnHolderClickListener(new Coun.OnHolderClickListener() {
@Override
public void onHolderClick(View view, int section, int position) {
List<String> list = new ArrayList<>();
switch (section){
case 0:
list.addAll(onelist);
break;
case 1:
list.addAll(twolist);
break;
case 2:
list.addAll(threelist);
break;
case 3:
list.addAll(fourlist);
break;
case 4:
list.addAll(fivelist);
break;
}
Toast.makeText(MainActivity.this,"--" +list.get(position), Toast.LENGTH_SHORT).show();
}
});
}
private void initView() {
titlelist = new ArrayList<>();
onelist = new ArrayList<>();
twolist = new ArrayList<>();
threelist = new ArrayList<>();
fourlist = new ArrayList<>();
fivelist = new ArrayList<>();
titlelist.add("内外勤管理");
titlelist.add("业务汇报");
titlelist.add("财务管理");
titlelist.add("行政管理");
titlelist.add("人事管理");
onelist.add("考勤打卡");
onelist.add("签到");
onelist.add("请假");
onelist.add("外出");
onelist.add("出差");
onelist.add("加班");
twolist.add("日报");
twolist.add("周报");
twolist.add("月报");
twolist.add("绩效自评");
threelist.add("报销");
threelist.add("付款申请");
threelist.add("备用金申请");
fourlist.add("物品领用");
fourlist.add("采购");
fourlist.add("用印申请");
fourlist.add("用车申请");
fivelist.add("招聘");
fivelist.add("调岗申请单");
fivelist.add("离职申请");
}
}