无法在Anko中调用StartActivityForResult

时间:2017-07-20 21:39:04

标签: android kotlin anko

我对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时出现语法错误。该错误表明它是接收器类型不匹配,接收器应该是ActivityFragment。另一方面,StartActivity的接收者可以是FragmentContextAnkoContext<*>(无论是什么)。

当然,我可以通过构建Intent并且不使用anko.StartActivityForResult来完成这项工作(我认为),但我会了解正在发生的事情。

我想到也许我的代码组织错了。上面的代码位于自定义ViewGroup中,其中ImageButtons mHelp和mSettings为子项,contextContext传递给ViewGroup的主要内容构造函数。我是否应该在管理自定义onClickListeners的{​​{1}}中设置Activity?如果没有,我该如何致电ViewGroup

1 个答案:

答案 0 :(得分:2)

startActivityForResult只能在Activity上调用,因为只有Activity可以从另一个完成Activity收到结果。有一些解决方案,可能最简单的方法是更改​​自定义ViewGroup,以便它接受Activity而不只是Context,或者,如果您知道您只会使用该ViewGroup来自Activity的{​​{1}},只需将Context投放到Activity

当你说你的代码可能更好地组织起来时,你是对的,完全避开这个问题。在关注点分离后,您的ViewGroup不应对您应用中的导航操作负责。 ViewGroup可以允许侦听器注册现在触发导航操作的事件。这样,Activity可以注册该事件,自行导航并处理ViewGroup之外的结果。