MediaPlayer, RecyclerAdapter показывает несколько кнопок воспроизведения - PullRequest
0 голосов
/ 09 февраля 2019

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

Я инициализировал songTitle TextView и testButtonPlay button в sound_template.xml макете.

Если я инициализирую testButtonPlay в своей деятельности с RecyclerView, я получаюошибка:

java.lang.NullPointerException: попытка вызвать виртуальный метод 'void android.widget.ImageButton.setOnClickListener (android.view.View $ OnClickListener)' для ссылки на пустой объект

class RecyclerSoundScreenAdapter(val context: Context,
                                 val song: List<Sound>)
    : RecyclerView.Adapter<RecyclerSoundScreenAdapter.Holder>() {
    private var mediaPlayer: MediaPlayer? = null
    private var currentPlayingSound: Sound? = null

    override fun onBindViewHolder(holder: Holder, position: Int) {
        holder.bind(song[position])
    }

    override fun getItemCount(): Int {
        return song.count()
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
        val view = LayoutInflater.from(context).inflate(R.layout.sound_template, parent, false)
        return Holder(view)
    }

    fun releaseMediaPlayer() {
        mediaPlayer?.release()
        mediaPlayer = null
    }

    inner class Holder(itemView: View) : RecyclerView.ViewHolder(itemView) {

        fun bind(sound: Sound) = with(itemView) {
            songTitle.text = sound.title
            testButtonPlay.setOnClickListener {
                if (currentPlayingSound == sound) {
                    if (mediaPlayer?.isPlaying == true) {
                        mediaPlayer?.pause()
                    } else {
                        mediaPlayer?.start()
                    }
                } else {
                    if (mediaPlayer?.isPlaying == true) {
                        mediaPlayer?.release()
                        mediaPlayer = null
                    }
                    currentPlayingSound = sound
                    mediaPlayer = MediaPlayer.create(context, sound.resId)
                    mediaPlayer?.start()
                }
            }
        }
    }
}
...