я выбираю трек для проигрывания из созданного класса но проигрывается всё равно трек по 0 индексу вмсето задуманного 1
Окно проигрывателя:
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.media.MediaPlayer
import android.os.Handler
import android.util.Log
import android.view.MotionEvent
import android.view.View
import android.widget.ImageView
import android.widget.ProgressBar
import android.widget.TextView
import java.text.SimpleDateFormat
import java.util.Locale
import com.example.zxc.MusicDataProvider
class player : AppCompatActivity() {
private lateinit var albumCoverImageView: ImageView
private lateinit var songTitleTextView: TextView
private lateinit var songArtistTextView: TextView
private lateinit var mediaPlayer: MediaPlayer
private lateinit var playPauseButton: ImageView
private lateinit var progressBar: ProgressBar
private lateinit var startTextView: TextView
private lateinit var endTextView: TextView
private val handler = Handler()
private var isDragging = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_player)
albumCoverImageView = findViewById(R.id.albumCoverImageView)
songTitleTextView = findViewById(R.id.songTitleTextView)
songArtistTextView = findViewById(R.id.songArtistTextView)
mediaPlayer = MediaPlayer.create(this, R.raw.dura)
playPauseButton = findViewById(R.id.playPauseButton)
progressBar = findViewById(R.id.progressBar)
startTextView = findViewById(R.id.startTextView)
endTextView = findViewById(R.id.endTextView)
val songIndex = intent.getIntExtra("songIndex", 0)
// Получение данных о текущем треке из MusicDataProvider
val songs = MusicDataProvider.getSongs()
if (songIndex in 0 until songs.size) {
val selectedSong = MusicDataProvider.getSongs()[songIndex]
albumCoverImageView.setImageResource(selectedSong.albumCoverResId)
songTitleTextView.text = selectedSong.title
songArtistTextView.text = selectedSong.artist
}
playPauseButton.setImageResource(R.drawable.st_pause)
mediaPlayer.start()
progressBar.max = mediaPlayer.duration
updateProgressBar()
progressBar.setOnTouchListener { _, motionEvent ->
when (motionEvent.action) {
MotionEvent.ACTION_DOWN -> {
mediaPlayer.pause()
}
MotionEvent.ACTION_MOVE -> {
val newPosition = (motionEvent.x / progressBar.width * progressBar.max).toInt()
progressBar.progress = newPosition
updateProgressText(newPosition)
}
MotionEvent.ACTION_UP -> {
mediaPlayer.seekTo(progressBar.progress)
mediaPlayer.start() // Возобновляем воспроизведение
}
}
true
}
Log.d("PlayerActivity", "Received songIndex: $songIndex")
playPauseButton.setOnClickListener {
if (mediaPlayer.isPlaying) {
mediaPlayer.pause()
playPauseButton.setImageResource(R.drawable.st_play)
} else {
mediaPlayer.start()
playPauseButton.setImageResource(R.drawable.st_pause)
updateProgressBar()
}
}
}
private fun updateProgressBar() {
progressBar.progress = mediaPlayer.currentPosition
val currentTime = mediaPlayer.currentPosition
val totalTime = mediaPlayer.duration
val timeFormat = SimpleDateFormat("mm:ss", Locale.getDefault())
startTextView.text = timeFormat.format(currentTime)
endTextView.text = timeFormat.format(totalTime - currentTime)
handler.postDelayed({ updateProgressBar() }, 1000)
}
private fun updateProgressText(currentTime: Int) {
val timeFormat = SimpleDateFormat("mm:ss", Locale.getDefault())
startTextView.text = timeFormat.format(currentTime)
endTextView.text = timeFormat.format(mediaPlayer.duration - currentTime)
}
override fun onDestroy() {
super.onDestroy()
mediaPlayer.release()
}
}
Окно списка музыки:
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ImageView
import com.example.zxc.MusicDataProvider
class musiclist : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_musiclist)
val play1: ImageView = findViewById(R.id.tr_dura)
// Добавьте другие ImageView, если необходимо
play1.setOnClickListener {
// Запуск активности "player" с передачей индекса первой песни (0)
val intent = Intent(this, player::class.java)
intent.putExtra("songIndex", 0) // Устанавливаем индекс трека
startActivity(intent)
}
val play2: ImageView = findViewById(R.id.tr_sis)
play2.setOnClickListener() {
val intent = Intent(this, player::class.java)
intent.putExtra("songIndex", 1) // Установите нужный индекс здесь
startActivity(intent)
}
// Добавьте обработчики для других ImageView, если необходимо
}
}
Класс со списками музыки исполнителя и обложки:
class MusicDataProvider {
data class Song(
val title: String,
val artist: String,
val albumCoverResId: Int,
val audioResId: Int
)
companion object {
private val songs: List<Song> = listOf(
Song("ДораДура", "Дора", R.drawable.alb_dora, R.raw.dura),
Song("Младшая Сестра", "1", R.drawable.alb_dora, R.raw.sistr),
)
private val artists: List<String> = listOf(
"Дора",
"2rbina 2rista",
"ANNA ASTI"
)
fun getSongs(): List<Song> {
return songs
}
fun getArtists(): List<String> {
return artists
}
}
}
Ответы (1 шт):
Автор решения: Wlad
→ Ссылка
if (songIndex in 0 until songs.size) {
val selectedSong = MusicDataProvider.getSongs()[songIndex]
albumCoverImageView.setImageResource(selectedSong.albumCoverResId)
songTitleTextView.text = selectedSong.title
songArtistTextView.text = selectedSong.artist
}
- непонятный перебор массива
- использование
until. запись(0 until 3) == (0 1 2)если хотите включить 3ку, в котлине это пишется так(0..3)
вы передаете 1 во второе окно, затем перебираете массив пока он меньше 1.
отсюда и получаете, что у вас проигрывается 0-ой индекс.
удалите перебор массива. тяните сразу нужную песню по индексу.