Выбор, какая кнопка нажата в строке списка утилит - PullRequest
0 голосов
/ 15 января 2019

Я рассмотрел различные вопросы и ответы на эту проблему в стеке и все еще пытаюсь найти правильное решение. Если у кого-то есть ссылка на мою проблему с решением, я отмечу ее как дубликат, но я еще не нашел ее.

Примечание. Код был обновлен до 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 так что я могу использовать его со строкой, которая была нажата. Не уверен, как продолжить и все еще копать, но любая информация будет оценена.

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Вы можете использовать библиотеку EventBus, она легко достигнет желаемого

https://github.com/greenrobot/EventBus

0 голосов
/ 15 января 2019

Я думаю, вы можете сделать это.

Создать переменную и установщик этой переменной в вашем activity.

private YourObject localVariable;

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

И при нажатии на recycle View Список Listener.

Typecast ваш context в ваш activity и установите там локальную переменную.

((YourActivity)context).setLocalVariable(arrayList[position])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...