选择在recyclerview行kotlin中按下的按钮

时间:2019-01-15 07:23:39

标签: android kotlin android-recyclerview

我看过各种stackoverflow问题和该问题的答案,但仍在努力寻找正确的解决方案。如果有人链接到我的解决方案问题,我会将其标记为重复,但是我还没有找到。

注意:代码已升级到Kotlin,因此请注意某些代码可能尚未针对Kotlin最佳实践进行优化。

我已经捕获了RecyclerAdapter中按下的按钮,现在希望它传递回具有recyclerView.addOnItemTouchListener的活动。

我的RecyclerAdapter代码如下:

override fun onBindViewHolder(holder: NotesPicsRecyclerAdapter.RecyclerViewHolder, position: Int) {

    val data_provider = arrayList[position]

    holder.notePicShareButton.setOnClickListener {
        Toast.makeText(context, "Share Button", Toast.LENGTH_SHORT).show()
    }
    holder.notePicChangePicButton.setOnClickListener {
        Toast.makeText(context, "Edit Button", Toast.LENGTH_SHORT).show()
    }
    holder.notePicDeleteButton.setOnClickListener {
        Toast.makeText(context, "Delete Button", Toast.LENGTH_SHORT).show()
    }
    try {
        holder.imageText.text = data_provider.notes_text
        val imageFile = data_provider.image_path
        val inputStream = context.assets.open(imageFile)
        val d = Drawable.createFromStream(inputStream, null)
        holder.imagePath.setImageDrawable(d)
    } catch (e: IOException) {
        e.printStackTrace()
    }
}

class RecyclerViewHolder(view: View) : RecyclerView.ViewHolder(view) {
    internal var imagePath: ImageView
    internal var imageText: TextView
    internal var notePicShareButton: Button
    internal var notePicChangePicButton: Button
    internal var notePicDeleteButton: Button
    init {
        imagePath = view.findViewById<View>(R.id.single_note_pic_image) as ImageView
        imageText = view.findViewById<View>(R.id.single_note_pic_text) as TextView
        notePicShareButton = view.findViewById<View>(R.id.single_note_pic_share_button) as Button
        notePicChangePicButton = view.findViewById<View>(R.id.single_note_pic_change_pic_button) as Button
        notePicDeleteButton = view.findViewById<View>(R.id.single_note_pic_delete_button) as Button
    }
}

我的“活动”代码段中的onCreate如下:

recyclerView.addOnItemTouchListener(
            MyRecyclerViewClickListener(this, object : MyRecyclerViewClickListener.OnItemClickListener {
                override fun onItemClick(view: View, position: Int) {
                      val thePos = arrayList[position].list_id
                      Toast.makeText(applicationContext, "This row: $thePos", Toast.LENGTH_SHORT).show()
                }
            })
    )

ToastRecyclerAdapter中的所有Activity消息都可以正常工作,因此我捕获了正在按下哪个按钮以及正在选择的行,但是我需要传递按钮信息回到我的Activity,这样我就可以在按下的行中使用它。不知道如何进行并仍在进行挖掘,但任何信息都将不胜感激。

2 个答案:

答案 0 :(得分:0)

我想你可以做到的。

在您的activity中创建变量和该变量的设置器。

private YourObject localVariable;

public YourObject setLocalVariable(YourObject localVariable){
   this.localVariable= localVariable;
}

然后点击recycle View列表Listener

Typecast将您的context放入您的activity,然后在此处设置您的Local变量。

((YourActivity)context).setLocalVariable(arrayList[position])

答案 1 :(得分:0)

您可以使用EventBus库,它将轻松实现您想要的

https://github.com/greenrobot/EventBus