如何进入需要使用extras数据启动的父Activity?

时间:2017-07-19 15:07:44

标签: android android-activity

假设我有一个应用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吗?

1 个答案:

答案 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);