我有两个名为
“第一”和“第二”
当我在第一个活动中调用startActivityForResult()
方法时,将转到第二个活动并获取一些数据并返回。
如果第二个活动的方向发生了变化,那么在获取数据后它不会调用
onActivityResult()
方法。
它调用创建函数。
我应该怎么做才能保存从第二个活动中获取的数据并onActivityResult()
调用方法,即使我改变了方向。
我有两个名为
“第一”和“第二”
当我在第一个活动中调用startActivityForResult()
方法时,将转到第二个活动并获取一些数据并返回。
如果第二个活动的方向发生了变化,那么在获取数据后它不会调用
onActivityResult()
方法。
它调用创建函数。
我应该怎么做才能保存从第二个活动中获取的数据并onActivityResult()
调用方法,即使我改变了方向。
有同样的问题,解决这个问题的最简单方法是将结果写入savedInstanceState
,下面的示例仅用于设置Activity.RESULT_OK
,但它很容易适用于任何可打包/可序列化的对象:
var setResult: Boolean = false
override fun onSaveInstanceState(outState: Bundle) {
if (setResult) outState.putBoolean("saved_state_key", true)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
savedInstanceState?.getBoolean("saved_state_key")?.let {
requireActivity().setResult(Activity.RESULT_OK)
}
}
如果您使用的是 viewModels,则不需要将其写入 savedInstanceState,在这种情况下,只需检查是否savedInstanceState
不为空onCreate
(这意味着片段/活动已重新创建)
在您的应用清单中,您是否记得说过您的First
活动是您的活动的父项Second
?像这样的东西:
<activity android:name=".Second"
android:parentActivityName=".First">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".First"/>
</activity>
因为如果你这样做,那么即使你调用时屏幕方向不同,也应该onActivityResult()
调用它。First
finish()
Second
当方向改变时,应用程序正在重新加载自身,这意味着它正在重新启动。
您可以AndroidManifest.xml
通过将该行添加到Activity
声明中来阻止方向更改:
android:orientation="portrait"
或者如果你想要横向:
android:orientation="landscape"