0

我试图从“onActivityResult”函数中调用一个新的 Intent,但结果不是我所希望的。它要么无限循环,要么提前退出。

在“主要”活动中,我创建了一个包数组,然后为每个包创建一个意图,等待当前活动返回“完成”,然后使用下一个包开始一个新活动。

问题是“主要”活动在每次调用 onActivityResult 后重新启动,这意味着它的 onStart 再次被调用,并且我的所有包都在无限循环中重新创建。避免这种情况的唯一方法似乎是添加“finish();” 到 onActivityResult 函数的末尾,但这会在仅调用一次 onActivityResult 后停止整个过程。

下面是代码(删节):

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.).
    }
}

这样做的正确方法是什么?

4

1 回答 1

0

我不清楚您要做什么,但是如果您只需要在活动首次启动时创建您的 Bundle,请在 onCreate() 中进行。通常,您为活动实现的回调是 onCreate、onPause 和 onResume。在活动的正常生活中,它处于 onResume 和 onPause 之间的生命周期循环中。

不过,我很好奇。为什么每次都需要回到主活动?听起来好像您的主要活动“控制”了其他活动。通常,Android 应用程序的更好模型是让每个活动独立工作,并在必要时切换到另一个活动。这本质上是一个没有“主要”的“程序”,除了当用户单击启动器中的应用程序图标时启动的“平等中的第一个”活动。

于 2013-03-26T20:14:30.143 回答