假设我有一个应用Activity A
将显示帖子及其评论。如果我点击其中一条评论,它将转到Activity B
。因此,Activity B
会显示评论并回复该评论。到目前为止,我没有问题。我只需要在Activity
中将Activity B
的父Activity A
设为manifest.xml
。
现在,我还有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 B
开始Activity X
吗?
答案 0 :(得分:1)
有不同的方法可以做到这一点。我最喜欢的是通过您的设置将必要的信息传递给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);