我将mSelectedItem定义为CustomAdapter类中的public var,我认为mSelectedItem=getAdapterPosition()
在内部类ViewHolder中使用mSelectedItem时会出现。
但它失败了,显示"未解决的参考:mSelectedItem"错误,为什么?
而且,对于Kotlin中getAdapterPosition()
的好方法,有提示显示"此检查报告调用java get和set方法,可以使用Kotlin合成属性替换#34 ;,但是当我使用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
}
}
}
答案 0 :(得分:2)
如果您不想使ViewHolder成为inner class
(您不应该这样做),您可以创建一个类似AdapterSelection的类,其中包含一个字段var selectedItem:Int
并替换您的{{1与public var mSelectedItem = -1
)。然后将private var mSelectedItem = AdapterSelection(-1
传递给mSelectedItem
方法(bind
并在绑定内,设置位置bindItems(aMSetting: MSetting, adapterSelection:AdapterSelection)
。
你本可以通过适配器本身,但它很混乱,这就是为什么我建议再做一个类。
答案 1 :(得分:0)
ViewHolder是Recycler而不是operator.if如果你想获得位置,你将这个mSelectedItem = position
放在onBindViewHolder中。这个名为getAdapterPosition()的方法总是与notifyItemsetChanged()一起工作。希望这会有所帮助你。