如何将侦听器从片段传递到适配器?(科特琳)

Meltix:

我目前正在开发具有“设置活动”的应用。在此“设置活动”中,有一个FrameLayout可以加载包含RecyclerView的片段。

在该片段中,我必须将OnItemClick函数所需的侦听器传递给RecyclerView适配器。我尝试使用context代替this,但是它不起作用。

如何正确将侦听器传递给适配器?

码:

FragmentSettings.kt

class FragmentSettingsMain : Fragment(), AdapterSettings.OnItemClickListener {
    val settingsList = listOf(
        DataItemsSettings(getString(R.string.look), getString(R.string.lookdescription), R.drawable.ic_colored_color_lens),
        DataItemsSettings(getString(R.string.playing), getString(R.string.playingdescription), R.drawable.ic_colored_view_carousel),
        DataItemsSettings(getString(R.string.images), getString(R.string.imagesdscription), R.drawable.ic_colored_image),
        DataItemsSettings(getString(R.string.audio), getString(R.string.audiodescription), R.drawable.ic_colored_volume_up),
        DataItemsSettings(getString(R.string.other), getString(R.string.otherdescription), R.drawable.ic_colored_shape),
        DataItemsSettings(getString(R.string.about), getString(R.string.aboutdescription), R.drawable.ic_colored_info)
    )

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        retainInstance = true
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? = inflater.inflate(R.layout.fragment_settings_main, container, false)

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        rvSettings.apply {
            layoutManager = LinearLayoutManager(activity)
            adapter = AdapterSettings(settingsList, NEEDS LISTENER HERE)
        }
    }

    override fun OnItemClick(position: Int) {
        when(position) {
            0 -> //Start new fragment here
            1 -> //Start new fragment here
            2 -> //Start new fragment here
            3 -> //Start new fragment here
            4 -> //Start new fragment here
            5 -> this.startActivity(Intent(this, ActivityAbout::class.java))
        }
    }
}

AdapterSettings.kt

class AdapterSettings(
    var settingsList: List<DataItemsSettings>,
    var listener: OnItemClickListener
) : RecyclerView.Adapter<AdapterSettings.SettingsViewHolder>() {

    inner class SettingsViewHolder(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): SettingsViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.item_settings, parent, false)
        return SettingsViewHolder(view)
    }

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

    override fun onBindViewHolder(holder: SettingsViewHolder, position: Int) {
        holder.itemView.apply {
            rvTitle.text = settingsList[position].stringTitle
            rvDescription.text = settingsList[position].stringDescription
            rvIcon.setImageResource(settingsList[position].itemIcon)
        }
    }

    interface OnItemClickListener {
        fun OnItemClick(position: Int)
    }
}
Nitin Jain:

当您在apply块中使用此代码时,需要在使用此代码时添加@FragmentSettingsMain。

AdapterSettings(settingsList,this@FragmentSettingsMain)

或者您可以使用

val listener  = this
rvSettings.apply{
  AdapterSettings(settingsList,listener)
}

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将数据从片段传递到适配器

如何将数据从适配器类传递到底部对话框对话框片段

如何为适配器中的项目设置侦听器?

Firebase在Android的适配器中添加侦听器

将单击侦听器添加到通用RecyclerView适配器

获取空指针异常-使用接口将数据从适配器传递到子片段

如何在Android中转到ListView适配器项单击侦听器以分段?

将值从回收站适配器传递到android中的片段

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

我如何将变量从适配器传递给我在Kotlin中实例化的片段

如何将变量从适配器传递到片段?

RecyclerView,适配器,单击侦听器和AsyncTask

哪个更好:密钥侦听器或密钥适配器?

如何将侦听器从Fragment传递到DialogFragment?

如何将ArrayList从适配器传递到活动?

如何将接口传递给适配器?

摇摆。适配器/侦听器与数据绑定

如何将毕加索传递到ListView适配器

JTable鼠标侦听器鼠标适配器

如何将变量从活动传递到适配器

如何将参数从客户端传递到http适配器

如何将json数组对象从一个JavaScript适配器传递到另一个JavaScript适配器?

如何使用适配器处理项目中视图的单击侦听器?

如何在 OnSuccessListener 中的 recyclerview 适配器中传递侦听器

如何在没有空侦听器的 kotlin 上的适配器上实现点击侦听器?

如何在 recyclerview 适配器上检查空侦听器?

RecyclerView 适配器中的空侦听器

如何将数据从适配器传递到片段?

如何将片段上下文传递给适配器?