我对android很新,我正在尝试用kotlin来学习它。在此代码中
mHelp.setOnClickListener {context.startActivity<HelpActivity>()}
mSettings.setOnClickListener {
context.startActivityForResult<LocalSettingsActivity>(
LOCAL_SETTINGS_REQUEST,
"coords" to this.board.mCoords,
"drag" to this.mWhiteStones[0].drag )
}
对startActivity
的调用工作正常,但在调用startActivityForResult
时出现语法错误。该错误表明它是接收器类型不匹配,接收器应该是Activity
或Fragment
。另一方面,StartActivity
的接收者可以是Fragment
,Context
或AnkoContext<*>
(无论是什么)。
当然,我可以通过构建Intent
并且不使用anko.StartActivityForResult
来完成这项工作(我认为),但我会了解正在发生的事情。
我想到也许我的代码组织错了。上面的代码位于自定义ViewGroup
中,其中ImageButtons
mHelp和mSettings为子项,context
是Context
传递给ViewGroup
的主要内容构造函数。我是否应该在管理自定义onClickListeners
的{{1}}中设置Activity
?如果没有,我该如何致电ViewGroup
?
答案 0 :(得分:2)
startActivityForResult
只能在Activity
上调用,因为只有Activity
可以从另一个完成Activity
收到结果。有一些解决方案,可能最简单的方法是更改自定义ViewGroup
,以便它接受Activity
而不只是Context
,或者,如果您知道您只会使用该ViewGroup
来自Activity
的{{1}},只需将Context
投放到Activity
。
当你说你的代码可能更好地组织起来时,你是对的,完全避开这个问题。在关注点分离后,您的ViewGroup
不应对您应用中的导航操作负责。 ViewGroup
可以允许侦听器注册现在触发导航操作的事件。这样,Activity
可以注册该事件,自行导航并处理ViewGroup
之外的结果。