Android-从片段到适配器的侦听器值?

Meltix

我正在开发一个在片段内具有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)
    }
}
i30mb1

如果你想做这个工作

adapter = AdapterList(itemList, this)

您的班级应该意识到OnItemClickListener自己想通过,可以通过以下方法解决:

class FragmentItems : Fragment(), OnItemClickListener { ...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章