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

hivapdat  于 2022-12-30  发布在  Kotlin
关注(0)|答案(3)|浏览(106)

我尝试根据列表项的位置为一些对话框属性设置一些值,并且刚刚将一些代码从Java转换为Kotlin,但是由于某种原因,click侦听器中的所有myList[position]示例都返回此错误:
'位置的getter: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()
            }
        }
    }
}
oaxa6hgo

oaxa6hgo1#

我假设您在谈论ViewHolder类中对position的引用。
在那里使用adapterPosition代替。Java的等价物是getAdapterPosition()。如果你在Java中使用getPosition(),你可能已经隐藏了弃用警告。

t9aqgxwy

t9aqgxwy2#

此方法已弃用。当适配器嵌套其他适配器时,此方法会引起混淆。如果在适配器的上下文中调用此方法,则可能需要调用getBindingAdapterPosition(),或者如果需要RecyclerView看到的位置,则应调用getAbsoluteAdapterPosition()。
[图片来源:https://developer.android.com/reference/androidx/循环视图/窗口小部件/循环视图。

yyhrrdl8

yyhrrdl83#

itemSelectedForPreview(layoutPosition)

itemSelectedForPreview(bindingAdapterPosition)

相关问题