我看过各种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()
}
})
)
Toast
和RecyclerAdapter
中的所有Activity
消息都可以正常工作,因此我捕获了正在按下哪个按钮以及正在选择的行,但是我需要传递按钮信息回到我的Activity
,这样我就可以在按下的行中使用它。不知道如何进行并仍在进行挖掘,但任何信息都将不胜感激。
答案 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库,它将轻松实现您想要的