Как я могу обновить активность из класса Item <ViewHolder>()? - PullRequest
0 голосов
/ 28 декабря 2018

Как мне обновить действие из класса Item ().Я понятия не имею, как это должно работать или если это даже работает в такого рода классе.Я знаю, как сделать это внутри класса AppCompatActivity (), но, как предполагается, эти команды не будут работать.

Это мой предмет:

class TrackItem(val track: Track): Item<ViewHolder>() {
override fun bind(viewHolder: ViewHolder, position: Int) {
    viewHolder.itemView.TrackName_txt.text = track.title
    viewHolder.itemView.TrackArtist_txt.text = track.artist
    viewHolder.itemView.TrackDuration_txt.text = track.duration
    Picasso.get().load(track.imageUrl).into(viewHolder.itemView.TrackImage_View)


    viewHolder.itemView.TrackDelete_btn.setOnClickListener {

        val playlistname = track.playlistId
        val uid = FirebaseAuth.getInstance().uid
        val FileId = track.FileId
        val databaseref = FirebaseDatabase.getInstance().getReference("/playlist/$uid/$playlistname/music/$FileId")
        databaseref.removeValue()
        val mp3ref = FirebaseStorage.getInstance().getReferenceFromUrl(track.trackUrl)
        mp3ref.delete()
        val coverref = FirebaseStorage.getInstance().getReferenceFromUrl(track.imageUrl)
        coverref.delete()

        recreate()


    }
}

override fun getLayout(): Int {
    return R.layout.trackinfo
}
}

1 Ответ

0 голосов
/ 28 декабря 2018

Если вам нужно запустить в действии какой-то код, который может выполнить перезагрузку / обновление / выборку / удаление и т. Д. С вашим пользовательским интерфейсом или данными, просто создайте и предоставьте специальный интерфейс.Ниже приведен пример.

class MyAdapter constructor(private val list: List<DataModel>, private val listener: UpdateActivityListener) : RecyclerView.Adapter<MyAdapter.ViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        return ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.adapter_item_title, parent, false))
    }

    override fun getItemCount(): Int = list.size

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.itemView.title.text = list[position].title
    }

    inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        init {
            // Example of listener for your actions inside item
            view.setOnClickListener {
                listener.eventFirst()
            }
            view.setOnLongClickListener {
                listener.eventSecond(adapterPosition)
                true
            }
        }
    }

    // Example of callbacks which activity wait
    interface UpdateActivityListener {
        fun eventFirst()
        fun eventSecond(position: Int)
    }

}

Также я вижу, что вы используете какую-то библиотеку, такую ​​как FastAdapter, просто реорганизуйте код и установите для слушателя метод onBind.Но лучше сделайте это на ViewHolder init.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...