如何在 RecyclerView 适配器中获取第二个模型的位置

Posted

技术标签:

【中文标题】如何在 RecyclerView 适配器中获取第二个模型的位置【英文标题】:How can i get the position for second model in RecyclerView Adapter 【发布时间】:2020-12-12 14:20:57 【问题描述】:

这是我的 RecyclerView 适配器代码

class RecyclerAdapterMain(

val product: ArrayList<ModelProductMain>,

val viewmodel: ViewModelRoom,

val newitem: List<ModelItemsNew>

) :

RecyclerView.Adapter<RecyclerAdapterMain.ViewHolder>() 


class ViewHolder(itemview: View) : RecyclerView.ViewHolder(itemview) 


    val title: TextView = itemview.product_txt
    val price: TextView = itemview.price_product
    val imageproduct: ImageView = itemview.product_image
    val btn_add_product: Button = itemview.btn_add_product
    val amount_value: TextView = itemview.amount_value
    val button_remove_product: Button = itemview.button_remove_product




override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder 


    val layoutview =
        LayoutInflater.from(parent.context).inflate(R.layout.product_items, parent, false)
    return ViewHolder(layoutview)



override fun getItemCount(): Int = product.size


override fun onBindViewHolder(holder: ViewHolder, position: Int) 


    val products = product[position]
    holder.title.text = products.title
    holder.price.text = products.price.toString()
    Picasso.get().load(products.image).into(holder.imageproduct)


    holder.itemView.setOnClickListener 

        val bundle = Bundle()
        val myfragment = ItemDetailsfragment()
        myfragment.arguments = bundle


        val activity = it.context as AppCompatActivity
        activity.supportFragmentManager.beginTransaction()
            .replace(R.id.homepage, myfragment)
            .commit()


        bundle.putString("title", products.title)
        bundle.putString("price", products.price.toString())
        bundle.putString("image", products.image.toString())


    

    holder.amount_value.visibility = View.GONE
    holder.button_remove_product.visibility = View.GONE
    holder.btn_add_product.setOnClickListener 

        holder.amount_value.visibility = View.VISIBLE
        holder.button_remove_product.visibility = View.VISIBLE

            holder.amount_value++    
        
    


问题是我希望按下按钮时产品的数量会增加......为此我需要每个项目的位置,但我的产品的第一个模型(覆盖 fun getItemCount(): Int = product. size ) 获得了我的新模型所需的位置 (val newitem: List )。

我尝试了这段代码 val productpos = newitem.position 并给我错误大小为 1 并且索引也是 1 ... 我不知道如何解决它。刚才我需要一个新模型的位置。如何获得新职位?

【问题讨论】:

【参考方案1】:

试试这个:

val productpos = newitem.get(position)

然后得到总大小:

override fun getItemCount(): Int = product.size + newitem.size

【讨论】:

感谢兄弟的回答...但是给我这个错误 (java.lang.IndexOutOfBoundsException: Index: 1, Size: 1)

以上是关于如何在 RecyclerView 适配器中获取第二个模型的位置的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Recyclerview中单击的适配器位置获取数据?

如何使用适配器为recyclerview从字符串数组列表中的元素获取字符串

如何从recyclerview适配器获取选定项目的数量?

从片段中获取意图值后,我如何在 recyclerview 项目中实现单击

如何在 Kotlin 中为 Android 的 RecyclerView 适配器初始化 viewHolder

在 RecyclerView 适配器中调用片段并获取 id