zoukankan      html  css  js  c++  java
  • RecyclerView的Adapter的详细使用过程

    一:给RecyclerView的adapter赋给其指定的adapter
    mBinder?.mrecycler?:是Recycler的ID,
    mBinder?.mrecycler?.adapter = adapter
    二:实现RecyclerView的Adapter
    1:定义一个类继承于RecyclerView.Adapter并实现其相应方法
    class MyAdapter:RecyclerView.Adapter<参数一> {
    }
    进去查看得:

       参数一需要一个继承与ViewHolder的类,这时候就定义一个类继承于ViewHolder,并完成其构造

    class myViewHolder(itemView: View) :RecyclerView.ViewHolder(itemView){
    这里面是对item的管理,可以在这里面进行对item各个部分的分解
    }
    在将myViewHolder传到参数一中:
    class MyAdapter: RecyclerView.Adapter<MyAdapter.myViewHolder>() {
    class myViewHolder(itemView: View) :RecyclerView.ViewHolder(itemView){

    }
    }

    2:实现adapter中各方法:

    class MyAdapter: RecyclerView.Adapter<MyAdapter.myViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): myViewHolder {
    parent:item的父容器,viewType:下面一个方法传递过来的类型
    创造item,将xml文件转换成view,并传递给ViewHolder
    return myViewHolder(转换的视图)
    }

    override fun getItemViewType(position: Int): Int {
    posion:item所在的位置
    确定每个item的类型
    return super.getItemViewType(position)
    }
    override fun onBindViewHolder(holder: myViewHolder, position: Int) {
    holder:ViewHolder传递过来的,position:当前item所在的位置
    绑定数据,将确切的数据绑定到视图上,
    }

    override fun getItemCount(): Int {
    确定共有多少个item
    }
    class myViewHolder(itemView: View) :RecyclerView.ViewHolder(itemView){

    }
    }

    
    
    例子:

    mBinder?.mrecycler?.layoutManager = StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL)


    //确定数据源
    for (i in 0..10){
    if ((Random.nextInt())%2==0){
    dataSource.add(R.drawable.arm_right)
    }else{
    dataSource.add(R.drawable.head)
    }

    }
    val adapter = PhotosAdapter()
    adapter.datas = dataSource
    mBinder?.mrecycler?.adapter = adapter

    adapter中:
    class PhotosAdapter: RecyclerView.Adapter<PhotosAdapter.myViewHolder>() {
    lateinit var datas:MutableList<Int>
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): myViewHolder {
    //确定每一个item的具体视图(样子),通过xml文件配置
    //将xml转换成view,layoutInflate布局解析器
    /*
    adapter里面是没有上下文的,可以通过知道一个view,获取view所在的上下文
    */
    //获取布局解析器
    val layoutInflater = LayoutInflater.from(parent.context)
    //解析布局
    val item = layoutInflater.inflate(R.layout.photo_card_item,parent,false)
    return myViewHolder(item)
    }

    override fun onBindViewHolder(holder: myViewHolder, position: Int) {
    //视图解析出来之后是否需要绑定数据
    //position传过来的是每个item的序号(每个item的所在处)
    //viewHodler负责管理每个item。但是传递过来的item是一个一个的传,并非一起传
    holder.item_image.setImageResource(datas[position])
    }

    override fun getItemCount(): Int {
    //确定有多少个item
    return datas.size
    }
    //定义一个类继承与RecyclerView.ViewHodler
    class myViewHolder(itemView: View) :RecyclerView.ViewHolder(itemView){
    //这里传递过来的view,就是滚动过程中的要重复利用的item
    //通过这里获取每个item中每个确切的控件
    val item_image = itemView.findViewById<ImageView>(R.id.imageView)
    }
    }

  • 相关阅读:
    C#设计模式(8)——桥接模式(Bridge Pattern)
    我的微软最有价值专家(Microsoft MVP)之路
    C#设计模式(7)——适配器模式(Adapter Pattern)
    C#设计模式(6)——原型模式(Prototype Pattern)
    C#设计模式(5)——建造者模式(Builder Pattern)
    C#设计模式(4)——抽象工厂模式
    C#设计模式(3)——工厂方法模式
    C#设计模式(2)——简单工厂模式
    [C# 基础知识系列]C#中易混淆的知识点
    [C# 开发技巧]如何使不符合要求的元素等于离它最近的一个元素
  • 原文地址:https://www.cnblogs.com/luofangli/p/14945384.html
Copyright © 2011-2022 走看看