java在适配器类中获取ArrayIndexOutOfBoundsException
当我单击项目时,我得到
java.lang.ArrayIndexOutOfBoundsException: length = 10; index = -1
这是我的onCreateViewHolder
方法,当我单击item时,我想打开DetailActivity并发送数据
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.alphabet_item, parent, false)
val holder = ViewHolder(view)
view.setOnClickListener {
val intent = Intent(parent.context, ItemAlphabetDetailActivity::class.java)
intent.putExtra("NAME", alphabets[holder.position].context)/*
intent.putExtra("CONTEXT", alphabets[holder.adapterPosition].context)
intent.putExtra("IMAGE", alphabets[holder.adapterPosition].image)
intent.putExtra("SOUND", alphabets[holder.adapterPosition].sound)*/
parent.context.startActivity(intent)
}
return ViewHolder(view)
}
这是我的班级ItemAlphabetAdapter
class ItemAlphabetAdapter(
private val alphabets: ArrayList<ItemAlphabet>
) : RecyclerView.Adapter<ItemAlphabetAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.alphabet_item, parent, false)
val holder = ViewHolder(view)
view.setOnClickListener {
val intent = Intent(parent.context, ItemAlphabetDetailActivity::class.java)
intent.putExtra("NAME", alphabets[holder.position].context)/*
intent.putExtra("CONTEXT", alphabets[holder.adapterPosition].context)
intent.putExtra("IMAGE", alphabets[holder.adapterPosition].image)
intent.putExtra("SOUND", alphabets[holder.adapterPosition].sound)*/
parent.context.startActivity(intent)
}
return ViewHolder(view)
}
override fun getItemCount(): Int = alphabets.size
override fun onBindViewHolder(holder: ItemAlphabetAdapter.ViewHolder, position: Int) {
val alphabet = alphabets[position]
holder.name.text = alphabet.name
holder.image.visibility = alphabet.image
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val image: ImageView = itemView.findViewById(R.id.alphabet_image)
val name: TextView = itemView.findViewById(R.id.alphabet_name)
}
}
# 1 楼答案
您必须编写以下代码
在onBindViewHolder()中,它已经将位置作为参数之一提供给您
# 2 楼答案
onCreateViewHolder方法不是每次recyclerview需要显示一行时都被调用,而是仅当需要创建新视图且屏幕上没有足够的视图时才被调用。而是为每个位置调用onBindViewHolder方法。因此,要获得行的确切位置,请使用
holder.adapterPosition
# 3 楼答案
试试这个。在onBindViewHolder中移动setOnClickListener
项目视图。setOnClickListener{ 如果(位置!=-1){