В режиме 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()
}
}
}
}
}