在kotlin中,我们可以setOnClickListener()像这样使用:
view.setOnClickListener { println("Hello") }
Run Code Online (Sandbox Code Playgroud)
但是如果我定义自己的界面,我只能传递这样的匿名对象:
obj.setMyListener(object: MyListener() {
...
})
Run Code Online (Sandbox Code Playgroud)
我只是想知道他们如何setOnClickListener()接受一个函数而不是一个匿名对象.
我的应用程序显示sd卡的歌曲列表.我希望能够在默认播放器上播放歌曲.我已经获得了关于这首歌的所有数据:id,title,album,artist,path ...
有没有办法启动默认播放器播放歌曲?
我尝试过的:
用Intent.CATEGORY_APP_MUSIC.我可以启动默认播放器,但无法设置歌曲.
Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, Intent.CATEGORY_APP_MUSIC)打开默认音乐应用.但是intent.setData(Uri.withAppendedPath(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id))抛出异常没有找到意图.
使用已弃用MediaStore.INTENT_ACTION_MUSIC_PLAYER.找不到活动.
Intent(MediaStore.INTENT_ACTION_MUSIC_PLAYER).setDataAndType(Uri.fromFile(songFile), "audio/*")
INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH.启动搜索,但不是歌曲,说无法准备混合播放音乐.但是,它现在可以在Google上运行,因此它可能是关键.
Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH).putExtra(SearchManager.QUERY, name)ACTION_VIEW.它有效,但它推出了一个紧凑版本的播放器,我想要完整的播放器.
注意:我想启动外部播放器,而不是在我的应用中.
更新:看起来像Google Now硬编码的Play Music和Youtube支持.
使用带有List作为值定义的hashMap:
private var mMap: HashMap<String, List<DataStatus>>? = null
Run Code Online (Sandbox Code Playgroud)
有一个函数返回一个hashMap但具有MutableList的值
fun getDataStatus(response: JSONObject?): HashMap<String, MutableList<DataStatus>> {
return HashMap<String, MutableList<AccountStatusAlert>>()
}
Run Code Online (Sandbox Code Playgroud)
当将结果传递给期望List的hashMap时,它得到了错误:
mMap = getDataStatus(resp) //<== got error
Run Code Online (Sandbox Code Playgroud)
得到错误:
Error:(81, 35) Type mismatch: inferred type is HashMap<String,
MutableList<DataStatus>> but HashMap<String, List<DataStatus>>? was expected
Run Code Online (Sandbox Code Playgroud)