【问题标题】:Android, Get result from third activityAndroid,从第三个活动中获取结果
【发布时间】:2015-03-09 14:13:50
【问题描述】:

first活动中,有空的ListViewButton

当我按下按钮时,它会启动 second 具有ListView 类别的活动。

在我点击其中一个 listElements 后,它将启动 第三个 活动,该活动具有 ListView 以及属于我选择的类别的元素。

当我选择 third ListView 的元素时,它必须将我送回 first 活动,在那里我选择的元素被添加到我的空 ListView

【问题讨论】:

  • 为什么不将片段用于此类用例?
  • 在某些iPhone应用程序中,某些操作分为切换屏幕和切换回第一屏显示结果的步骤。
  • 甚至片段也可以重排

标签: java android listview android-activity android-listview


【解决方案1】:

像这样使用Intent.FLAG_ACTIVITY_FORWARD_RESULT


FirstActivity 应该使用 startActivityForResult() 启动 SecondActivity

SecondActivity 应该使用这个来启动ThirdActivity

Intent intent = new Intent(this, ThirdActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
startActivity(intent);
finish();

这告诉ThirdActivity 它应该将结果返回给FirstActivity

ThirdActivity 应该使用

返回结果
setResult(RESULT_OK, data);
finish();

此时,FirstActivity.onActivityResult() 将使用从ThirdActivity 返回的数据调用。

【讨论】:

  • 这是有效的解决方案
【解决方案2】:

虽然我恳求你改变你的架构设计,但可以这样做:

文件 ActivityOne.java

...
startActivityForResult(new Intent(this, ActivityTwo.class), 2);
...
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(resultCode == RESULT_OK && data != null) {
        //Collect extras from the 'data' object
    }
}
...

文件 ActivityTwo.java

...
startActivityForResult(new Intent(this, ActivityTwo.class), 3);
...
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(resultCode == RESULT_OK && data != null) {
        setResult(resultCode, data);
        finish();
    }
    setResult(RESULT_CANCELLED);
}
...

文件 ActivityThree.java

...
//Fill the Intent resultData with the data you need in the first activity
setResult(RESULT_OK, resultData);
finish();
...

【讨论】:

  • 不要这样做。它意味着明显的副作用,即眨眼。
猜你喜欢
  • 1970-01-01
  • 2023-01-04
  • 2021-10-11
  • 2012-12-08
  • 2013-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-14
相关资源
最近更新 更多