8

我有两个名为

“第一”和“第二”

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

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

它调用创建函数。

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

4

3 回答 3

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,则不需要将其写入 savedInstanceState,在这种情况下,只需检查是否savedInstanceState不为空onCreate(这意味着片段/活动已重新创建)

于 2020-08-03T10:29:04.430 回答
0

在您的应用清单中,您是否记得说过您的First活动是您的活动的父项Second?像这样的东西:

<activity android:name=".Second"
          android:parentActivityName=".First">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".First"/>
</activity>

因为如果你这样做,那么即使你调用时屏幕方向不同,也应该onActivityResult()调用它。Firstfinish()Second

于 2016-05-28T17:57:50.217 回答
-4

当方向改变时,应用程序正在重新加载自身,这意味着它正在重新启动。

您可以AndroidManifest.xml通过将该行添加到Activity声明中来阻止方向更改:

android:orientation="portrait"

或者如果你想要横向:

android:orientation="landscape"
于 2013-07-28T19:45:46.173 回答