Probleme mit Spieltasten -Symbole im Cardview -Adapter in Android Studio (mit Kotlin) habenAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Probleme mit Spieltasten -Symbole im Cardview -Adapter in Android Studio (mit Kotlin) haben

Post by Anonymous »

Ich habe nur ein paar Wochen Android Studio gelernt, also bitte vergib mir diesen Beitrag (durchsuchtes Web und fragte Chat -GPT, aber es war mir nicht viel Hilfe). Sie spielen Sound so, wie ich es möchte, aber ich kann nicht so ändern, dass die Spiel-/Stopp-Symbole ordnungsgemäß funktionieren, ohne "benachrichtigenDataSchanged () zu verwenden. Bit. Adapter, der das Spielen/Stop -Symbole entsprechend an meinen MP3 -Dateien geändert hat, um zu spielen.

Code: Select all

package com.example.prototype1

import android.media.MediaPlayer
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageButton
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView

class CardAdapter(private val cardList: List) :
RecyclerView.Adapter() {

private var sharedMediaPlayer: MediaPlayer? = null
private var currentlyPlayingPosition: Int? = null
private var isPlaying = false

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

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

override fun getItemCount(): Int = cardList.size

override fun onViewRecycled(holder: CardViewHolder) {
super.onViewRecycled(holder)
if (holder.adapterPosition == currentlyPlayingPosition) {
releaseMediaPlayer()
}
}

private fun releaseMediaPlayer() {
sharedMediaPlayer?.release()
sharedMediaPlayer = null
isPlaying = false
val oldPosition = currentlyPlayingPosition
currentlyPlayingPosition = null
oldPosition?.let { notifyItemChanged(it) }
}

inner class CardViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
private val cardTitle: TextView = itemView.findViewById(R.id.textViewPolski)
private val cardDescription: TextView = itemView.findViewById(R.id.textViewIslandzki)
private val playButton: ImageButton = itemView.findViewById(R.id.buttonPlay)

fun bind(cardItem: CardItem, position: Int) {
cardTitle.text = cardItem.textPolish
cardDescription.text = cardItem.textIcelandic

// Set icon according to playing state
if (position == currentlyPlayingPosition && isPlaying) {
playButton.setImageResource(android.R.drawable.ic_media_pause)
} else {
playButton.setImageResource(android.R.drawable.ic_media_play)
}

playButton.setOnClickListener {
val isThisCurrentlyPlaying = (position == currentlyPlayingPosition)

if (isThisCurrentlyPlaying && isPlaying) {
// Stop current
sharedMediaPlayer?.stop()
releaseMediaPlayer()
notifyDataSetChanged()
} else {
// Stop existing playback
sharedMediaPlayer?.stop()
sharedMediaPlayer?.release()

// Start new playback
sharedMediaPlayer = MediaPlayer.create(itemView.context, cardItem.audioResourceId)
sharedMediaPlayer?.start()
isPlaying = true
currentlyPlayingPosition = position

sharedMediaPlayer?.setOnCompletionListener {
releaseMediaPlayer()
notifyDataSetChanged()
}

notifyDataSetChanged() // refresh all buttons
}
}
}
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post