我有两个名为'First'和'Second'的活动
当我在第一个活动中调用startActivityForResult()
方法时,将进入第二个活动并获取一些数据后返回。
如果第二个活动的方向发生变化,则在获取数据后不会调用onActivityResult()
方法。
它会调用onCreate()
函数。
我该怎么做才能保存从第二个活动获取的数据,即使我更改了屏幕方向也能调用onActivityResult()
方法?
我有两个名为'First'和'Second'的活动
当我在第一个活动中调用startActivityForResult()
方法时,将进入第二个活动并获取一些数据后返回。
如果第二个活动的方向发生变化,则在获取数据后不会调用onActivityResult()
方法。
它会调用onCreate()
函数。
我该怎么做才能保存从第二个活动获取的数据,即使我更改了屏幕方向也能调用onActivityResult()
方法?
First
活动是Second
活动的父级活动?像这样的格式:<activity android:name=".Second"
android:parentActivityName=".First">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".First"/>
</activity>
Second
中的finish()
时,屏幕方向不同,First
也应该调用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)
}
}
savedInstanceState
是否不为null(这意味着片段/活动已被重新创建)。Activity
声明中,在AndroidManifest.xml
中阻止屏幕方向更改:android:orientation="portrait"
或者如果你想要横向方向:
android:orientation="landscape"