0

私はこの奇妙な問題に直面しています:私はstartActivityForResult()次のに渡すために使用していActivityます。2番目のActivity例では、電話の向きを変更し始めるまではすべて問題ありません。これにより、前に戻るときに問題が発生します。返された値はnullActivityのようです。Intent

使用しようとしまし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 に答える