如何通过发送信息返回旧活动

时间:2013-12-20 20:18:09

标签: android eclipse android-intent android-activity

我有一个主要活动,它启动另一个活动,然后,主要活动应该从上一个活动接收信息。但是当我完成最新的活动时,我来到第二个,当然不是主要的活动。如何在不开始新的情况下到达那里? 非常感谢,Vinzenz:)

以下是其中的一部分:(编辑)

对不起,但是我没理解。 在我的MainActivity中,我用第二个开始:

@Override
public void onClick(View arg0) {
    Intent i = new Intent(getApplicationContext(), SecondActivity.class);
    startActivityForResult(i, currentxyzIndex);         
}

在第二个活动中,我开始使用另一个:

@Override
public void onClick(View arg0) {
    Intent i = new Intent(getApplicationContext(), ThirdActivity.class);
    startActivityForResult(i, 100); 
    finish();           
}

在这一个中我想回到第一个:

@Override
public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {

    int xyzIndex = position;

    Intent in = new Intent(getApplicationContext(),
                    MainActivity.class);

    in.putExtra("xyzIndex", xyzIndex);
    setResult(100, in);

    finish();
}

2 个答案:

答案 0 :(得分:2)

您应该使用SecondActivity启动startActivityForResult()并在MainAcitvity onActivityResult()中覆盖。这样,当您在SecondActivity上调用finish()时,将调用MainActivity的onActivityResult()。 onActivityResult的签名是

protected void onActivityResult(int requestCode, int resultCode,
             Intent data)

如果在您的SecontActivity上finish()之前,请致电setResult(int, Intent),最后一个将是onActivityResult

的参数数据

答案 1 :(得分:1)

我想我现在理解你的问题,但你应该对其进行编辑以使其更清晰。我将总结一下我认为你想做的事情。

有三项活动:A,B和C.

在活动A中,您有一些按钮或视图,当点击该按钮或视图时,将使用startActivityForResult()打开活动B.

在活动B中,您有一些按钮或视图,当点击该按钮或视图时,将使用startActivityForResult()打开活动C.

在活动C中,您设置一些数据,设置结果并调用完成,希望返回活动A.


正如黑带所述,您应该在活动中使用onActivityResult(int, int, Intent)。这应该在使用startActivityForResult()的每个活动中,即活动A和活动B.

活动A:

onClick() {
    startActivityForResult(new Intent(this, ActivityB.class), currentxyzIndex);
}

@Override
onActivityResult(int requestCode, int resultCode, Intent data) {
    // this is the data that comes back from Activity B when Activity B calls finish()
    // do as you need
}

活动B:

onClick() {
    startActivityForResult(new Intent(this, ActivityC.class), 100);
    // do not call finish here! 
}

@Override
onActivityResult(int requestCode, int resultCode, Intent data) {
    // this is the data that comes back from Activity C when Activity C calls finish()

    // set the data as the result
    setResult(...);

    // then you can finish
    finish();
}

活动C和你一样,我相信。

您的应用程序架构要求您执行此操作,这有点腥味;也许如果你用关于域的信息和每个Activity的用途(每个用户代表什么)描述你的问题,它可以重新制定。