Recyclerview3多态的使用

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("离职申请");
    }

}










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值