java - java.lang.IndexOutOfBoundsException:索引:1,大小:Kotlin 中的 1
问题描述
我正在使用 recyclerview 制作项目。当我将此语句添加到适配器时:
itemView.optionText.text=data.options[adapterPosition].description
它抛出java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
编码:
看起来您的帖子主要是代码;请添加更多细节。看起来您的帖子主要是代码;请添加更多细节。
我还添加了模型类来发布。
我不知道是什么原因造成这个问题。
internal class CartItemRecyclerAdapter(var context: Context, var cartItems: ArrayList<ViewCartdocs>, var listener: CartItemListener) : RecyclerView.Adapter<CartItemRecyclerAdapter.Holder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
var view = LayoutInflater.from(context).inflate(R.layout.cart_item_list, parent, false)
return Holder(view)
}
override fun onBindViewHolder(holder: Holder, position: Int) {
holder.bind(cartItems[position].cartdocs, context)
holder.checkbox.isChecked=cartItems[position].selected
holder.checkbox.setOnCheckedChangeListener(null)
holder.checkbox.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
holder.checkbox.background = holder.checkbox.context.getDrawable(R.drawable.check_box_active_cs)
} else {
holder.checkbox.background = holder.checkbox.context.getDrawable(R.drawable.check_box_no)
}
listener.onCheckboxChanged(position, isChecked)
}
}
override fun getItemCount(): Int {
return cartItems.count()
}
inner class Holder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(data: Cartdocs, context: Context) {
val dec = DecimalFormat("##,000")
itemView.titleText.text = data.title
itemView.priceText.text = dec.format(data.price).toString()
itemView.textViewItemNumer.text = data.amount.toString()
itemView.pointValueText.text = dec.format(data.point).toString() + "P"
itemView.optionText.text= data.options[adapterPosition].description
Glide.with(context).load(data.mainImage).into(imageView)
} } } }
data class Cartdocs(
@SerializedName("id")
var id:String?=null,
@SerializedName("title")
var title:String?=null,
@SerializedName("stock")
var stock:Int?=null,
@SerializedName("mainImage")
var mainImage:String?=null,
@SerializedName("amount")
var amount:Int?=null,
@SerializedName("added")
var added:String?=null,
@SerializedName("options")
var options:ArrayList<cartOptions>,
var unitPoint:Int?=null,
@SerializedName("totalPrice")
var totalPrice:Int?=null,
@SerializedName("totalPoint")
var totalPoint:Int?=null
)
data class cartOptions(
var id:String?=null,
var description:String?=null
)
有人可以帮我吗?
解决方案
问题是 - 您正在访问内部数组或内部项目列表。
您正在返回 (cartItems.count())
override fun getItemCount(): Int {
return cartItems.count()
}
对于绑定功能,您从 - cartItems[position].cartdocs传递数据
您正在访问data.options[adapterPosition]的绑定函数内部
上面的行就像 - cartItems[position].cartdocs.options[adapterPosition]
所以这里的adapterPosition与data.options列表大小不匹配
如果需要,可以将 cartOptions 的 ArrayList 组合为单个字符串
var descriptions = ""
for ((index, option) in data.options.withIndex()) {
descriptions += option.description
if (index != (data.options.size - 1)) {
descriptions += ", "
}
}
itemView.optionText.text= descriptions
请在绑定函数中试试这个。如果您仍然遇到问题,请在评论部分告诉我。我很乐意提供帮助。
快乐编码:)
推荐阅读
- angular - 如何根据垫表上的条件更改列中的数据
- javascript - 如何在完美大小的谷歌网站上嵌入内容以使内容不可滚动?
- erlang - 如何在系统范围内安装 erlang 包而不是作为依赖项?
- sql - 带有光标的 PL SQL 打印
- angular - 为什么内置属性指令用方括号括起来?
- python - Python根据日期对列表进行部分排序
- azure - 如何查看容器的 Azure Web 应用程序的日志?
- python - 扩展时在列中向后搜索的数据框快速方法
- string - Matlab过滤两个字符串以使它们相等
- reactjs - Gatsby 无法处理来自 markdown 文件的图像