java - 在适配器类中获取 ArrayIndexOutOfBoundsException

标签 java android kotlin

当我点击项目时,我得到

java.lang.ArrayIndexOutOfBoundsException: length = 10; index = -1

这是我的onCreateViewHolder方法,当我单击项目时,我想打开 DetailActivity 并发送有 Intent 的数据

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)

}

}

最佳答案

您必须编写以下代码

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)

在 onBindViewHolder() 中,它已经将您的位置作为参数之一

关于java - 在适配器类中获取 ArrayIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54125718/

相关文章:

java - 如何在Android中使用Java设置可编辑的EditText?

java - Java中ClassCastException的解释

java - GetExtra Android 不起作用

android - 显示Android手机中安装的所有消息传递应用程序

android - 可以将流从一个可组合传递到另一个吗?

java - 通过 GCM Server(Java) 为 >1000 台设备推送通知

java - 如何点击 javascript :void(0) button in SeleniumWebdriver Java?

Android 网络 - 最佳实践

android - 从另一个开发人员导入的代码 : <No resource identifier found for attribute 'ProgressColor' in package. ..> 我的一个 .xml 文件中出现错误

java - 安卓工作室 : Could not set process working directory to "new directory"