Я сейчас работаю над проектом Android (Kotlin). По сути, это аудиоплеер, который отображает и воспроизводит все аудиофайлы, сохраненные на устройстве.
Проигрыватель состоит из фрагмента Kotlin (PlaylistFragment.kt), соответствующего файла макета (frag_play_list. xml) и специального класса Kotlink (PlayMusicService.kt) для воспроизведения отдельных файлов. Для оптической иллюстрации макета фрагмента (frag_play_list), пожалуйста, проверьте вложение. Справа внизу вы можете увидеть несколько кнопок управления (предыдущая, воспроизведение, остановка и следующая).
Было бы абсолютно без проблем обратиться к этим кнопкам непосредственно в соответствующем классе kotlin (PlayListFragment).
Проблема или проблема всего этого в том, что я хочу обратиться к этим четырем кнопкам в другом файле - в файле PlayMusicService-File. Этот файл находится в другом каталоге и не имеет доступа к файлу макета.
Ниже вы можете увидеть файл PlayMusicService.kt. Как вы можете видеть, есть только некоторые логи c для воспроизведения аудиофайлов и поиска файла nex в списке. Но, как я уже сказал, я хочу получить доступ к кнопкам управления звуком.
var currentPos: Int = 0
var musicDataList: ArrayList<String> = ArrayList()
var mp: MediaPlayer? = null
var counter: Int = 0
var flag: Int = 0
var newPosition: Int = 0
override fun onBind(intent: Intent?): IBinder? {
return null
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
currentPos = intent!!.getIntExtra(SongListAdapter.MUSICITEMS, 0)
musicDataList = intent!!.getStringArrayListExtra(SongListAdapter.MUSICLIST)
counter++
val musicDataListSize = musicDataList.size / counter
Log.e("Log:", "The size of the audio file list is: $musicDataListSize")
// beim auswählen eines neuen songs wird der gegenwärtige gestoppt
if (mp != null) {
mp!!.stop()
mp!!.release()
mp = null
}
Log.e("Log:", "Round $flag")
mp = MediaPlayer()
Log.e("Log ", "The id $currentPos is clicked.")
mp!!.setDataSource(musicDataList[currentPos])
mp!!.prepare()
mp!!.setOnPreparedListener {
mp!!.start()
mp!!.setOnCompletionListener {
mp!!.stop()
flag=1
playNextSong(flag, currentPos, musicDataListSize)
}
}
return super.onStartCommand(intent, flags, startId)
}
// Find the next song
fun playNextSong(flag:Int, currentPos:Int, listSize:Int){
var flag1 = flag;
var currentPos1 = currentPos
var listSize1:Int = listSize
Log.e("Log: ", "Function is called: (flag: $flag1, currentPos: $currentPos1, listSize: $listSize1")
Log.e("Log: ", "New position is $newPosition")
newPosition = (currentPos1+flag1).toInt()
mp = MediaPlayer()
mp!!.setDataSource(musicDataList[newPosition])
mp!!.prepare()
mp!!.setOnPreparedListener {
mp!!.start()
mp!!.setOnCompletionListener{
mp!!.stop()
flag1 += 1
//check if the end is reached
var nextPos = (flag1+currentPos).toInt()
if (nextPos >= listSize)
{
Log.e("Log: ", "This is the end")
flag1 = 0
//starting the loop again and again
}
// take next song
else
{
playNextSong(flag1, currentPos, listSize)
}
}
}
}
Я хотел бы сделать кнопки управления доступными с помощью функции findViewById (R.id ...).
Что мне нужно сделать, чтобы обратиться к этим кнопкам в PlayListFragment класс или как мне импортировать файл макета?
Внешний вид PlaylistFragment