我对 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
or a Fragment
。另一方面,接收器StartActivity
可以是一个Fragment
, a Context
, or an AnkoContext<*>
(无论那是什么)。
当然,我可以通过构建(我认为)来完成这项工作Intent
并且不使用anko.StartActivityForResult
,但我想了解发生了什么事。
我突然想到,也许我的代码组织完全错误。上面的代码是自定义的ViewGroup
具有ImageButtons
mHelp 和 mSettings 作为子项,以及context
is the Context
传递给ViewGroup
的主要构造函数。我也许应该设置onClickListeners
in the Activity
管理自定义ViewGroup
?如果没有的话我怎么打电话StartActivityForResult
?
startActivityForResult
只能在Activity
因为只有一个Activity
可以收到另一个整理的结果Activity
。有几种解决方案,可能最简单的就是更改您的自定义ViewGroup
以便它接受Activity
而不仅仅是一个Context
,或者,如果你知道你只会使用它ViewGroup
从一个Activity
,只需投射Context
to an Activity
.
不过,当您说您的代码可能可以更好地组织以完全避免这个问题时,您是对的。就在关注点分离之后,您的ViewGroup
不应该对您的应用程序中的导航操作负责。这ViewGroup
例如,可以允许侦听器注册现在触发导航操作的事件。这样,Activity
可以注册该事件,自行进行导航并在外部处理结果ViewGroup
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)