次のように、ワーカーアクティビティからActivity
(PreferenceActivity
の子孫)を開始します。
_@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1458)
loadInfo();
}
void showSettingsDialog()
{
startActivityForResult(new Intent().setClass(this, MyConfigure.class), 1458);
}
_
MyConfigure
クラスにはsetResult()
呼び出しはありません。実際、MyConfigure
クラスには、addPreferencesFromResource
を使用して設定をロードするOnCreate()
以外のコードはありません。
これで、onActivityResult
アクティビティが実行された直後に、requestCode
が_1458
_のMyConfigure
で呼び出されます。 1.6および2.1エミュレーターと2.1デバイスでテスト済み。 PreferenceActivity
のどこかにsetResult()
の呼び出しが埋め込まれていますか?または、この時期尚早の呼び出しを他にどのように説明できますか?
これは、起動モードをsingleTop
に変更することで修正されます。
<activity
Android:name=".MainActivity"
Android:launchMode="singleTop">
Androidには、Activity
として宣言されたsingleTask
の結果(まだ設定されていない)をすぐに報告するバグ(機能)(?)があります(アクティビティは引き続き実行されますが) 。親アクティビティのlaunchMode
をsingleTask
からsingleTop
に変更すると、すべてが期待どおりに機能します。結果はアクティビティが終了した後にのみ報告されます。この動作には特定の説明がありますが(singleTask
アクティビティは1つしか存在できず、複数のウェイターが発生する可能性があります)、これは論理的な制限ではありません。
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
を呼び出す前にfragment.startActivityForResult(intent, 0);
を削除した後、問題を解決しました。
アクティビティからすべてのカスタム「Android:launchMode」を削除したところ、すべてが魅力的に機能しました。 Androidが何を理解しているか正確にわからない場合、これを変更するのは得策ではありません... Androidはこの方法で少し注意が必要です。
これは、インテントにIntent.FLAG_RECEIVER_FOREGROUND
フラグセット。
(はい、そのフラグはアクティビティに関連するものではありませんが、 別の問題 に対するショットガンソリューションの一部として、すべての意図にフラグを付けました。)