0

我正面临这个奇怪的问题:我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);
4

4 回答 4

0

根据您的活动所做的事情,当您的方向改变时,您可能不需要重新加载您的活动。您可以将此添加到<Activity>AndroidManifest 的相应部分以禁用重新加载:

android:configChanges="screenOrientation"

这实际上告诉设备您将自己处理配置更改,您可以通过回调来完成,或者如果您不关心方向更改,则可以忽略它。

于 2012-08-16T23:23:44.277 回答
0

好的,所以上面的答案在一定程度上有效,但你不应该做你正在做的事情onStop。您遇到的问题似乎来自您需要保存从调用活动中获得的额外内容。我将假设您发送的内容永远不会真正改变,并且您可以期望它始终发送相同数量的附加内容,但其中包含动态数据。

@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);,如果定向问题从未存在,您通常可以在任何地方进行操作。因此,正如您看到的那样,必须覆盖您可能只需要的东西的代码更少。让我知道这是否有意义。哦,如果你这样做,不要添加任何东西来禁用方向:)

于 2012-08-16T23:32:32.670 回答
0

我有同样的问题。看来,如果您将结果代码设置为Activity.RESULT_OK(-1),它会在 Android 更改方向时重置为 0。因此,您必须在某处重新创建您的意图并重置结果代码(可能在被覆盖的finish()方法中)。

于 2013-06-17T21:12:35.217 回答
0

当您更改方向时,Android 会重新创建您的活动

这可能是您面临的问题,尝试将数据存储到Shared PreferenceonCreate() 方法中并将值重新分配给您的变量。

您还可以尝试保存活动状态的方法onsaveinstancestate()onrestoreinstancestate()

于 2015-11-09T04:51:43.050 回答