无法在 Anko 中调用 StartActivityForResult

Can't Call StartActivityForResult in 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 作为 children,context 是传递给 ViewGroupContext ] 的主要构造函数。我是否应该在管理自定义 ViewGroupActivity 中设置 onClickListeners?如果不是,我怎么调用StartActivityForResult

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

虽然您说您的代码可能会组织得更好,以完全避免这个问题,但您是对的。在关注点分离之后,您的 ViewGroup 不应该对您应用程序中的导航操作负责。例如,ViewGroup 可以允许侦听器注册现在触发导航操作的事件。这样,Activity 可以注册该事件,自行进行导航并处理 ViewGroup.

之外的结果