我正在开发一个在片段内具有RecyclerView的应用程序。我的目标是通过适配器设置onClickItemListener。
但是,我在设置它时遇到了一个问题:当我调用适配器时,我必须放置两个参数,它们是我需要应用的列表和侦听器。
如果我将其设置this
为侦听器,则会收到TypeMismatch错误。
我可以代替什么使用this
?
片段
class FragmentItems : Fragment() {
var itemList = mutableListOf<DataItems>()
....
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
....
rvTracks.apply {
setHasFixedSize(true)
layoutManager = LinearLayoutManager(activity)
//Cant use 'this'!
adapter = AdapterList(itemList, this)
}
}
}
适配器
class AdapterList(
var listItems: List<DataItems>,
var listener: OnItemClickListener
) : RecyclerView.Adapter<AdapterOneColumn.ItemsViewHolder>() {
inner class ItemsViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener {
init {
itemView.setOnClickListener(this)
}
override fun onClick(p0: View?) {
val position : Int = adapterPosition
if(position != RecyclerView.NO_POSITION) {
listener.OnItemClick(position)
}
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemsViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_1_column, parent, false)
return ItemsViewHolder(view)
}
override fun getItemCount(): Int {
return listItems.size
}
override fun onBindViewHolder(holder: ItemsViewHolder, position: Int) {
holder.itemView.apply {
itemOneColumnTitle.text = listItems[position].stringTitle
itemOneColumnDescription.text = listItems[position].stringDescription
}
}
interface OnItemClickListener {
fun OnItemClick(position: Int)
}
}
如果你想做这个工作
adapter = AdapterList(itemList, this)
您的班级应该意识到OnItemClickListener
自己想通过,可以通过以下方法解决:
class FragmentItems : Fragment(), OnItemClickListener { ...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句