android - 如何从 Kotlin(Android)中的另一个类调用布局?
问题描述
我目前正在开发一个 Android (Kotlin) 项目。基本上,它是一个音频播放器,可以列出并播放设备上保存的所有音频文件。
播放器由 Kotlin 片段 (PlaylistFragment.kt)、关联的布局文件 (fragment_play_list.xml) 和用于播放各个文件的特殊 Kotlink 类 (PlayMusicService.kt) 组成。有关片段布局 (fragment_play_list) 的光学插图,请查看附件。在右下角,您可以看到一些控制按钮(上一个、播放、停止和下一个)。
直接在相应的 kotlin 类(PlayListFragment)中处理这些按钮绝对没有问题。
整个事情的挑战或问题是,我想在另一个文件中解决这四个按钮 - 在 de PlayMusicService-File 中。此文件位于不同的目录中,并且在任何时候都不会访问布局文件。
您可以在下面看到文件 PlayMusicService.kt。如您所见,播放音频文件和在列表中查找 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 类中的这些按钮,或者如何导入布局文件?
解决方案
推荐阅读
- javascript - 如何检查传递给 JavaScript 函数的参数类型?
- java - SAP Hybris - DataHub - 400 错误请求 y2ySyncYaaS
- javascript - 自动居中水平滚动条
- c++ - 为什么我的 c++ 代码不显示任何输出?
- python - 类和对象中方法的内存地址
- webpack - 如何在 Gatsby 中配置 mini-css-extract-plugin?
- ios - 错误:无法将输入文件作为属性列表读取:操作无法完成。(XCBUtil.PropertyListConversionError 错误 1。)
- typescript - 不在默认的“/test”文件夹中时使用带有 VScode 的 Mocha 测试资源管理器
- python - PyCharm 运行/调试配置,我真的需要每个文件/选项卡一个吗?
- spring-boot - 清除redis spring数据中特定缓存名称的缓存