【问题标题】:How to go back to old activity with sending information如何通过发送信息返回旧活动
【发布时间】:2013-12-20 20:18:09
【问题描述】:

我有一个主 Activity,它启动另一个 Activity,然后,主 Activity 应该从最后一个 Activity 接收信息。但是当我完成最新的活动时,我会来到第二个,当然不是 mainActivity。我如何在不开始新的情况下到达那里? 非常感谢,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();
}

【问题讨论】:

  • 第二个Activity可以调用finish,
  • 但是我无法启动这个,因为每次我想打开它时它都会关闭?
  • finish() 将关闭您调用的活动。你的问题真的很难理解;请编辑您的问题并明确说明您有多少活动(例如活动 A、活动 B、活动 C),并提供所需的流程(例如,应用程序在活动 A 打开,然后我单击一个按钮,它应该打开活动 B,然后在 B 中单击另一个按钮,B 应该关闭,然后返回到 A)。

标签: android eclipse android-intent android-activity


【解决方案1】:

您应该以startActivityForResult() 开头SecondActivity 并在MainAcitvity onActivityResult() 中覆盖。这样,当您在 SecondActivity 上调用 finish() 时,会调用 MainActivity 的 onActivityResult()。 onActivityResult 的签名是

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

如果在SecontActivity上finish()之前调用setResult(int, Intent),最后一个就是onActivityResult的参数数据

【讨论】:

  • 我很抱歉。但我没有让它运行。也许你想阅读我的编辑问题并再次帮助我。非常感谢。
  • 您是否阅读过有关 startActvityForResult 和 onActivityForResult 的文档?
【解决方案2】:

我想我现在了解您的问题,但您应该对其进行编辑以使其更清楚。我会总结一下我认为你正在尝试做的事情。

共有三个活动:A、B 和 C。

在 Activity A 中,您有一些按钮或视图,单击时会打开带有 startActivityForResult() 的 Activity B。

在 Activity B 中,您有一些按钮或视图,单击时会打开带有 startActivityForResult() 的 Activity C。

在Activity C中,你设置了一些数据,设置了结果,然后调用finish,希望回到Activity 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 的目的(每个 Activity 对用户代表什么)来描述您的问题,则可以重新制定它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    相关资源
    最近更新 更多