我在CustomAdapter类中将mSelectedItem定义为公共(public)变量,当我在内部类ViewHolder中使用mSelectedItem时,我认为mSelectedItem=getAdapterPosition()会很好。

但是它失败了,并显示“Unresolved reference:mSelectedItem”错误,为什么?

还有,对于Kotlin中getAdapterPosition()来说是什么好方法,有提示显示“此检查报告对Java get和set方法的调用,可以使用Kotlin合成属性来代替”,但是当我使用mSelectedItem=getAdapterPosition时,它将导致错误。

class CustomAdapter (val backupItemList: List<MSetting>) : RecyclerView.Adapter<CustomAdapter.ViewHolder>() {

    public var mSelectedItem = -1


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

        return ViewHolder(v)
    }


    override fun onBindViewHolder(holder: CustomAdapter.ViewHolder, position: Int) {
        holder.bindItems(backupItemList[position])
        holder.itemView.radioButton.setChecked(position == mSelectedItem);
    }


    override fun getItemCount(): Int {
        return backupItemList.size
    }


    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

        fun bindItems(aMSetting: MSetting) {

            itemView.radioButton.tag=aMSetting._id
            itemView.textViewUsername.text=aMSetting.createdDate.toString()
            itemView.textViewAddress.text=aMSetting.description
            mSelectedItem=getAdapterPosition()  //It will cause error
        }
    }
}

最佳答案

如果您不希望将ViewHolder设置为inner class(您不应该这样做),则可以创建一个像AdapterSelection这样的类,该类的内部带有一个var selectedItem:Int字段,然后将public var mSelectedItem = -1替换为private var mSelectedItem = AdapterSelection(-1。然后将mSelectedItem传递给bind方法(bindItems(aMSetting: MSetting, adapterSelection:AdapterSelection)和绑定(bind)内部,设置位置adapterSelection.selectedItem = getAdapterPosition()

您可能已经通过了适配器本身,但这很麻烦,这就是为什么我建议制作另一个类。

09-25 21:24