无法在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
的接收者可以是Fragment
, Context
或者AnkoContext<*>
(不管是什么)。
当然,我可以通过构建Intent
而不是使用anko.StartActivityForResult
来anko.StartActivityForResult
这个工作(我认为),但是我会理解发生了什么。
我想到,也许我的代码组织错了。 上面的代码是在一个自定义的ViewGroup
,它具有ImageButtons
mHelp和mSettings作为子元素, context
是传递给ViewGroup
的主构造函数的Context
。 我是否应该在管理自定义ViewGroup
的Activity
中设置ViewGroup
? 如果不是,我将如何调用StartActivityForResult
?
startActivityForResult
只能在一个Activity
上调用,因为只有一个Activity
可以从另一个Finish Activity
接收结果。 有几个解决方案,可能最简单的方法就是更改自定义的ViewGroup
以便它接受一个Activity
而不仅仅是一个Context
,或者,如果您知道只能从Activity
使用该ViewGroup
,则只需将该Context
为一个Activity
。
当你说你的代码可能更好地组织起来时,你是对的,为了完全避免这个问题。 只要分离问题,您的ViewGroup
不应该负责您的应用程序中的导航操作。 例如, ViewGroup
可以允许听众注册现在触发导航操作的事件。 这样, Activity
可以注册该事件,执行导航本身并处理ViewGroup
之外的结果。