• 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)
    }
    }

  • 相关阅读:
    poj3635(最短路)
    poj 3041( 最大匹配)
    poj 3522(生成树)
    poj 1904(强连通分量)
    poj 2446(二分匹配)
    poj 2400(最小权匹配)
    poj 2175(费用流消圈)
    poj 1256(搜索)
    poj 2195(最小费用流)
    poj 3613(最短路)
  • 原文地址:https://www.cnblogs.com/luofangli/p/14945384.html
Copyright © 2020-2023  润新知