由于方向改变,onActivityResult无法调用

时间:2013-07-28 19:41:11

标签: android performance android-intent android-activity android-orientation

我有两个名为

的活动

'第一'和'第二'

当我在第一个活动中调用startActivityForResult()方法时,将转到第二个活动并获取一些数据并返回。

如果第二个活动的方向发生了变化,那么在获取数据后它就不会调用 onActivityResult()方法。

它调用了create function。

我应该怎么做才能保存从第二个活动中获取的数据,并且即使我更改了方向,也会调用onActivityResult()方法。

3 个答案:

答案 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"