Android 从onActivityResult调用新的StartActivityForResult

Android 从onActivityResult调用新的StartActivityForResult,android,android-activity,Android,Android Activity,我试图从“onActivityResult”函数中调用一个新的意图,但结果并不是我所希望的。它要么没完没了地循环,要么早早退出 在“main”活动中,我创建一个bundle数组,然后为每个bundle创建一个intent,等待当前活动返回“done”,然后用下一个bundle启动一个新的bundle 问题在于,每次调用onActivityResult后,“main”活动都会重新启动,这意味着它的onStart会再次被调用,我的所有包都会在一个无休止的循环中重新创建。避免这种情况的唯一方法似乎是在

我试图从“onActivityResult”函数中调用一个新的意图,但结果并不是我所希望的。它要么没完没了地循环,要么早早退出

在“main”活动中,我创建一个bundle数组,然后为每个bundle创建一个intent,等待当前活动返回“done”,然后用下一个bundle启动一个新的bundle

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

以下是代码(节略):

公共类mainActivity扩展活动{
阵列列表丛;
int taskId=0;
//这里还有一些其他的事情;这个问题不重要。
创建时的公共无效(savedInstanceState)){
super.onCreate(savedInstanceState);
bundles=新的ArrayList();
}
public void onStart(){
//在这里,我执行一个循环,创建许多bundle
//并将它们添加到“bundles”数组(未显示)。
//开始第一个活动:
Intent firstIntent=新的Intent(this,StuffDoer.class);
putExtras(bundles.get(0));
startActivityForResult(第一意图,任务ID);
捆绑。移除(0);
}
ActivityResult上的公共void(int请求代码、int结果、意图数据){
super.onActivityResult(请求代码、结果、数据);
如果(结果==结果\确定){
如果(bundles.size()>0){
taskId+=1;
Intent Intent=新的Intent(this,StuffDoer.class);
intent.putExtras(bundles.get(0));
startActivityForResult(意图,任务ID);
捆绑。移除(0);
}否则{
Log.v(标记“无更多工作,完成”);
完成();
}
}否则{
Log.v(标记“未获得预期的返回代码”);
}
//finish();//如果我取消对此的注释,它将只执行此函数
//退出前一次。注释掉,它将永远循环
//(运行onStart,添加更多捆绑包等)。
}
}

正确的方法是什么?

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


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

您是否正在更改这些活动中的布局方向。。i、 接收中呼叫活动场景中的e肖像activity@Vino,我不认为改变活动的方向也会破坏呼叫活动。natedc,您是否尝试将迭代代码移动到
onCreate
?将bundles创建循环移动到onCreate函数解决了这个问题;基本上使用“主”活动作为调用/排序活动。我想我会用它来创建一个捆绑包,然后创建一个单一的意图。然后我可以将所有不同迭代的处理留给“stuffDoer”活动。将bundle创建循环移动到onCreate函数是我提出的问题的解决方案,但您对我的技术的批评是正确的。我调用活动,就好像它们只是实例化、运行然后销毁的简单类一样。这是我的第一个Android应用程序,也是我有史以来的第一个“真实世界”程序,所以我一定要突破我的界限。谢谢你的帮助!
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.).
    }
}