я выбираю трек для проигрывания из созданного класса но проигрывается всё равно трек по 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
        }
  1. непонятный перебор массива
  2. использование until. запись (0 until 3) == (0 1 2) если хотите включить 3ку, в котлине это пишется так (0..3)

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

→ Ссылка