android - 无法在 Anko 中调用 StartActivityForResult

标签 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的接收器可以是Fragment ,一个Context ,或 AnkoContext<*> (无论那是什么)。

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

我突然想到,也许我的代码组织完全错误。上面的代码是自定义的ViewGroupImageButtons mHelp 和 mSettings 作为子项,以及 contextContext传递到ViewGroup的主要构造函数。我是否应该设置 onClickListenersActivity管理自定义 ViewGroup ?如果没有的话我怎么打电话StartActivityForResult

最佳答案

startActivityForResult 只能在 Activity 上调用,因为只有 Activity 才能从另一个正在完成的 Activity 接收结果>。有几种解决方案,最简单的可能是更改自定义 ViewGroup 以便它接受 Activity 而不仅仅是 Context,或者,如果您知道只会使用 Activity 中的 ViewGroup,只需将 Context 转换为 Activity 即可。

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

关于android - 无法在 Anko 中调用 StartActivityForResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45225642/

相关文章:

generics - 我可以从化T创建KType吗

android - 关于在 Android 中以编程方式备份​​ Google Drive 上的 Sqlite 文件和照片的示例项目

android - 我们如何在 ViewModel 中将 "assign"LiveData 从 Room 转移到 MutableLiveData

reflection - 在 Kotlin 中通过反射调用方法的惯用方式

java - 使用 Kotlin 配置 Gradle

android - Flurry 不会在 android 中记录任何内容

安卓 : Hide RelativeLayout with animationwhen scroll down/up listview

kotlin - 在Kotlin Anko中使用ConstraintLayout

android - 在 fragment 中使用 Anko 布局