将代码转换为 Kotlin 后不推荐使用 Getter

Mac*_*ver 1 getter android kotlin android-recyclerview

我正在尝试根据列表项位置为某些对话框属性设置一些值,并且刚刚将一些代码从 Java 转换为 Kotlin,但由于某种原因,myList[position]单击侦听器中的所有实例都返回此错误:

'getter for position: Int' 已弃用。在 Java 中已弃用。

但是对于onBindViewHolder可以使用什么替代方法来解决此错误?

class MyRVAdapter(private val myList: ArrayList<Item>) : RecyclerView.Adapter<MyRVAdapter.ViewHolder>() {
    override fun getItemCount(): Int {
        return myList.size
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.myBtn.text = (myList[position].textBtnTitle)
     }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val v = LayoutInflater.from(parent.context).inflate(R.layout.my_cv, parent, false)

        return ViewHolder(v)
    }

    class ViewHolder (itemView : View):RecyclerView.ViewHolder(itemView) {
        val myBtn = itemView.findViewById<Button>(R.id.btn_a)!!

        init {
            myBtn.setOnClickListener {
                val builder = AlertDialog.Builder(myBtn.context)
                builder.setTitle(myList[position].txtDialogTitle)
                builder.setMessage(myList[position].txtDialogMessage)
                builder.setPositiveButton(android.R.string.ok){ dialog, _ -> dialog.dismiss() }

                val dialog: AlertDialog = builder.create()
                dialog.show()
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Nik*_*Nik 8

此方法已被弃用。当适配器嵌套其他适配器时,此方法会令人困惑。如果您在 Adapter 的上下文中调用此函数,您可能需要调用 getBindingAdapterPosition(),或者如果您想要 RecyclerView 所看到的位置,则应该调用 getAbsoluteAdapterPosition()。

[来源: https: //developer.android.com/reference/androidx/recyclerview/widget/RecyclerView.ViewHolder#getAdapterPosition() ]


The*_*rer 5

我假设您正在谈论对positionViewHolder 类内部的引用。

改用adapterPosition那里。Java 等价物是getAdapterPosition(). 如果您getPosition()在 Java中使用,您可能已经抑制了弃用警告。