如何转到需要使用额外数据启动的父活动?



>假设我有一个应用程序,Activity A将显示帖子及其评论。如果我单击其中一条评论,它将转到Activity B.因此,Activity B将显示评论以及对该评论的回复。到目前为止,我没有问题。我只需要为Activity B设置父Activitymanifest.xmlActivity A

现在,我还有Activity X,它将显示用户个人资料以及他们所有的帖子和评论。如果我单击评论,它将转到Activity B.但是,如果我单击向上按钮,它将返回到Activity X。如何让它回到Activity A

顺便说一句,要开始Activity A,我需要提供额外的数据,其中包含该帖子的 ID,对于每条评论,它们还有一个帖子 ID 的 ID。

是否可以在Activity B中执行以下操作?

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// if come from Activity A:
NavUtils.navigateUpFromSameTask(this);
// else
Intent intent = new Intent(this, ActivityA.class);
intent.putLong("ID", comment.getPostId());
startActivity(intent);
return true;
default:
}
return super.onOptionsItemSelected(item);
}

还是我应该使用类似TaskStackBuilder的东西从Activity X开始Activity B

有不同的方法可以做到这一点。我最喜欢的是将必要的信息传递给Intent,就像这样通过您的设置一样

Intent intent = new Intent();
String caller = getIntent().getStringExtra(CALLER_ACTIVITY);
if (caller.equals(ActivityA.class.getName())) {
NavUtils.navigateUpFromSameTask(this);
return; // dont need to do anything
} else if (caller.equals(ActivityX.class.getName())) {
intent.setClass(this, ActivityA.class);
}
intent.putExtras(getIntent().getExtras()); // if more info needed
startActivity(intent);
finish();

另一种方法是使用getCallingActivity,但这仅在您使用startActivityForResult()启动活动时才有效。
如果您使用AppCompat则可以使用 AppCompat.getReferrer(( 获取调用方

上述选项的行为可能会发生变化,这就是为什么使用 Intent 方式是个好主意的原因。

你会像这样开始ActivityB

Intent intent = new Intent(this, ActivityB.class);
intent.putExtra(ActivityB.CALLER_ACTIVITY, this.getClass().getName());
startActivity(intent);

相关内容

最新更新