我有两个名为
的活动'第一'和'第二'
当我在第一个活动中调用startActivityForResult()
方法时,将转到第二个活动并获取一些数据并返回。
如果第二个活动的方向发生了变化,那么在获取数据后它就不会调用
onActivityResult()
方法。
它调用了create function。
我应该怎么做才能保存从第二个活动中获取的数据,并且即使我更改了方向,也会调用onActivityResult()
方法。
答案 0 :(得分:0)
在您的应用程序的清单中,您是否记得说过您的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
时屏幕方向不同也是如此。
答案 1 :(得分:0)
遇到相同的问题,解决此问题的最简单方法是将结果写入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,则无需将其写入saveInstanceState,在这种情况下,只需检查savedInstanceState
中的onCreate
是否不为空(这意味着已重新创建片段/活动)< / p>
答案 2 :(得分:-4)
当方向改变时,应用程序正在重新加载,这意味着它正在重新启动。
您可以通过在AndroidManifest.xml
声明中添加该行来阻止Activity
中的方向更改:
android:orientation="portrait"
或者如果您想要横向展示:
android:orientation="landscape"