无法在Anko中调用StartActivityForResult

我对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的接收者可以是FragmentContext或者AnkoContext<*> (不管是什么)。

当然,我可以通过构建Intent而不是使用anko.StartActivityForResultanko.StartActivityForResult这个工作(我认为),但是我会理解发生了什么。

我想到,也许我的代码组织错了。 上面的代码是在一个自定义的ViewGroup ,它具有ImageButtons mHelp和mSettings作为子元素, context是传递给ViewGroup的主构造函数的Context 。 我是否应该在管理自定义ViewGroupActivity中设置ViewGroup ? 如果不是,我将如何调用StartActivityForResult

startActivityForResult只能在一个Activity上调用,因为只有一个Activity可以从另一个Finish Activity接收结果。 有几个解决方案,可能最简单的方法就是更改自定义的ViewGroup以便它接受一个Activity而不仅仅是一个Context ,或者,如果您知道只能从Activity使用该ViewGroup ,则只需将该Context为一个Activity

当你说你的代码可能更好地组织起来时,你是对的,为了完全避免这个问题。 只要分离问题,您的ViewGroup不应该负责您的应用程序中的导航操作。 例如, ViewGroup可以允许听众注册现在触发导航操作的事件。 这样, Activity可以注册该事件,执行导航本身并处理ViewGroup之外的结果。