「onActivityResult」関数内から新しいインテントを呼び出そうとしていますが、結果が期待したものではありません。無限にループするか、早期に終了します。
「メイン」アクティビティ内でバンドルの配列を作成し、次にバンドルごとにインテントを作成し、現在のアクティビティが「完了」を返すのを待ってから、次のバンドルで新しいアクティビティを開始します。
問題は、onActivityResultを呼び出すたびに「メイン」アクティビティが再開することです。つまり、onStartが再度呼び出され、すべてのバンドルが無限のループで再作成されます。これを回避する唯一の方法は、「finish();」を追加することです。onActivityResult関数の最後までですが、これにより、onActivityResultを1回呼び出しただけで、プロセス全体が停止します。
コードは次のとおりです(簡略化):
public class mainActivity extends Activity {
ArrayList<Bundle> bundles;
int taskId = 0;
// A few other things here; nothing important to this question.
public void onCreate(savedInstanceState)) {
super.onCreate(savedInstanceState);
bundles = new ArrayList<Bundle>();
}
public void onStart() {
// Here I perform a loop that creates a number of bundles
// and adds them to the "bundles" array (not shown).
// Start the first activity:
Intent firstIntent = new Intent(this, StuffDoer.class);
firstIntent.putExtras(bundles.get(0));
startActivityForResult(firstIntent, taskId);
bundles.remove(0);
}
public void onActivityResult(int requestCode, int result, Intent data) {
super.onActivityResult(requestCode, result, data);
if (result == RESULT_OK) {
if (bundles.size() > 0) {
taskId += 1;
Intent intent = new Intent(this, StuffDoer.class);
intent.putExtras(bundles.get(0));
startActivityForResult(intent, taskId);
bundles.remove(0);
} else {
Log.v(TAG, "No more to do, finishing");
finish();
}
} else {
Log.v(TAG, "Did not get the expected return code");
}
// finish(); // If I uncomment this, it only performs this function
// once before quitting. Commented out, it loops forever
// (runs the onStart, adds more bundles, etc.).
}
}
これを行う正しい方法は何ですか?