Звук запуска только тогда, когда приходит новый предмет - PullRequest
1 голос
/ 23 апреля 2020

Итак, я использую Firebase, и каждый раз, когда новый элемент заполняет мой просмотр, я хочу издавать звук.

Я сделал так, чтобы разместить интерфейс, который будет запускаться каждый раз при новом связывании occours

Адаптер

 inner class ProductViewHolder(itemView: View) : BaseViewHolder<Product>(itemView) {
        override fun bind(item: Pedido, position: Int) {


                itemListener?.launchNotificationSound()

}

Теперь, на мой взгляд, я просто играю звук с этим интерфейсом

override fun launchNotificationSound() {
     mediaPlayer?.start()
  }

Это прекрасно работает!

Но когда я прокручиваю, очевидно, что onBind снова сработает, поэтому я ищу способ просто воспроизвести этот звук всякий раз, когда новый предмет попадает в окно рециркуляции, а не всегда, когда он связан

Любое предложение ?

Я использую Firebase Firestore с обновлениями в реальном времени, поэтому, когда я добавляю новый элемент в мой массив, который он показывает в реальном времени в окне реселлера, я просто хочу запустить звук после добавления нового элемента

Проблема в том, что если я воспроизведу звук на слушателе в реальном времени, он будет срабатывать также при удалении элементов и при внесении новых изменений в этот элемент в базе данных, и моя цель - просто воспроизвести звук с тогда новые данные появляются только тогда, когда они обновляются

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Поскольку звук зависит от добавления элемента в набор данных, вы можете прослушивать изменения данных в вашем адаптере с помощью registerAdapterDataObserver и переопределять onItemRangeInserted, этот обратный вызов будет вызван вызовом notifyItemInserted(), например,

Регистрация наблюдателя

     customAdapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver(){

     override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
         super.onItemRangeInserted(positionStart, itemCount)
         playSound() // play your custom sound
     }
})

Добавление элемента в набор данных в вашем Adapter

dataSet.add("Added new element")
notifyItemInserted(dataSet.size)
0 голосов
/ 23 апреля 2020

Вы можете добавить DefaultItemAnimator , чтобы перерабатывать просмотр таким образом. Каждый раз, когда новый элемент добавлялся в окно просмотра, срабатывал метод onAddFinished .

class MyDefaultItemAnimator(var music: MusicPlayer): DefaultItemAnimator() {
    override fun onAddFinished(item: RecyclerView.ViewHolder?) {
        super.onAddFinished(item)
        mediaPlayer?.start()
    }    
}

, затем добавьте это в свой обзор переработчика.

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