带有标志FLAG_ACTIVITY_SINGLE_TOP和FLAG_ACTIVITY_CLEAR_TOP的活动结果

时间:2015-12-23 08:32:35

标签: java android android-activity

我有两项活动:user@host:~/$ h5ls ./my_data.h5 label_train Dataset {200, 1, 1, 1} new_train_x Dataset {200, 6000, 1, 1}

我使用ActivityA and ActivityB启动ActivityB

startActivityForResult

我将此代码从Intent lIntent = new Intent(ActivityA.this, ActivityB.class); startActivityForResult(lIntent, 1); 返回到ActivityB(ActivityB可以多次调用自己):

ActivityA

该代码在没有Intent intent = new Intent(ActivityB.this,ActivityA.class); intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra("files", mChecked.toArray(new String[mChecked.size()])); startActivity(intent); //setResult(Activity.RESULT_OK, intent); 的情况下运行良好。我的问题是我必须设置setResult才能正确处理RESULT_OK中的结果:

ActivityA

如果我在ActivityB中的@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1){ if (resultCode == Activity.RESULT_OK){ <-- always 0 and not -1 System.out.println("OK"); } } } 中发表评论,则永远不会调用onActivityResult。 如果我使用setResult,则会调用startActivity,但未设置onActivityResult。 如何在我的情况下设置结果代码?

更新

resultCode

调用代码Intent intent = new Intent(FileChooserActivity.this,FtpContentListView.class); intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra("files", mChecked.toArray(new String[mChecked.size()])); setResult(Activity.RESULT_OK, intent); startActivity(intent); ,但onActivityResult为0而不是-1(RESULT_OK)。

非常感谢你的帮助

的Stefan

2 个答案:

答案 0 :(得分:0)

我相信你所追求的是首先为结果启动活动B(就像你现在一样),然后使用Intent.FLAG_ACTIVITY_FORWARD_RESULT启动活动B的新实例。但请注意,每当您创建新的实例B时,您都需要完成以前的活动B实例(如本gist https://gist.github.com/mcelotti/cc1fc8b8bc1224c2f145中所述)。

或者,您可以简单地为结果启动活动B的所有实例,并将结果传递下来,直到达到活动A:

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    setResult(resultCode);
    finish();
}

答案 1 :(得分:0)

您需要在Activity-B中进行更改:

LocatableUser

希望这有效。