我正面临这个奇怪的问题:
我正在使用startActivityForResult()
传递给下一个Activity
。在第二个Activity
中,一切正常,直到我开始更改手机方向,这会在返回上一个Activity
时导致一些问题..似乎返回的Intent
是 null
我尝试使用onSaveInstanceState()/onRestoreInstanceState()
,但无法让它发挥作用。
有什么想法吗?
更新
这是用于发送数据的代码,如果我不更改方向,则可以正常工作
// photosList is an ArrayList<String>
Intent resultIntent = new Intent();
resultIntent.putStringArrayListExtra("photos", photosList);
setResult(RESULT_OK, resultIntent);
答案 0 :(得分:0)
根据您的活动的不同,您可能无需在方向更改时重新加载活动。您可以将其添加到AndroidManifest的相应<Activity>
部分,以禁用重新加载:
android:configChanges="screenOrientation"
这实际上告诉设备您将自己处理配置更改,并且您可以通过回调来执行此操作,或者如果您不关心方向更改,则可以忽略它。
答案 1 :(得分:0)
好的,所以上面的答案在某种程度上有效,但你不应该在onStop
上做你正在做的事情。您遇到的问题似乎来自于您需要保存从调用Activity获得的额外内容。我将假设您发送的内容永远不会真正改变,并且您可以期望它始终发送相同数量的附加内容,但动态数据包含在其中。
@Override
onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
Intent intent = getIntent();
savedInstanceState.putStringArrayList("photos", intent.getStringArrayListExtra("some_string"));
}
然后在onCreate中,您可以执行以下操作:
onCreate(Bundle savedInstanceState) {
/*I assume you got stuff places so just fit it in somewhere nice*/
Intent resultIntent = new Intent();
if(savedInstanceState == null) {
//we know here that this is the first call to the second Activity
//So you can just put the Intent that was sent since we know it came from the calling Activity with the original stuff
resultIntent = getIntent();
} else {
resultIntent.putStringArrayListExtra("photos", bundle.getStringArrayListExtra());
}
}
所以希望你明白我在那里做了什么。它本质上为您提供了一种方法,可以访问除了重新加载之外需要保留的任何内容。现在,如果方向问题从未存在过,那么您可以setResult(RESULT_OK, resultIntent);
在任何地方进行{{1}}。因此,当你看到更少的代码必须覆盖你可能只需要的东西。如果有意义,请告诉我。哦,如果你这样做,不要添加任何东西来禁用方向:)
答案 2 :(得分:0)
我遇到了同样的问题。看来,如果您将结果代码设置为Activity.RESULT_OK
( - 1),则在Android方向更改时会将其重置为0。因此,您必须重新创建意图并在某处重置结果代码(可能在重写的finish()
方法中)。
答案 3 :(得分:0)
Android会在您更改方向时重新创建您的活动
这可能是您遇到的问题,尝试将数据存储到Shared Preference
并在onCreate()方法中将值重新分配给您的变量。
您还可以尝试onsaveinstancestate()
和onrestoreinstancestate()
方法来保存您的活动状态。