建立一个假的"使用startActivity()的赌注

时间:2017-06-07 08:27:41

标签: java android

我需要在我的应用程序中构建一个虚假的后台堆栈。我正在使用aContext.startActivity(aIntent)开始一个活动,并希望构建一个堆栈,以允许用户转到HomeActivity而不是退出应用程序。

现在我了解了TaskStackBuilder但是我不确定如何在startActivity方法中实现它。

这是我在构建堆栈时到目前为止所得到的,但我不确定如何在startActivity方法中使用它

    Intent detailActivity = new Intent(aContext, DetailsActivity.class);
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(aContext);
    stackBuilder.addNextIntentWithParentStack(detailActivity);
    PendingIntent pendingIntent = stackBuilder
            .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

4 个答案:

答案 0 :(得分:0)

为什么不使用onBackPressed

Context context = this;

@Override
    public void onBackPressed()
    {
        Intent intent = new Intent(context,YourActivity.class);
        startActivity(intent);
    }

答案 1 :(得分:0)

您需要在不添加后台堆栈的情况下启动活动,然后覆盖onBackpressed

//Start activity without adding to history stack
Intent i = new Intent(...); // Your list's Intent
i.setFlags(i.getFlags() | Intent.FLAG_ACTIVITY_NO_HISTORY); // Adds the FLAG_ACTIVITY_NO_HISTORY flag
startActivity(i);

//Override the newly open activity onBackPressed()
@Override
public void onBackPressed()
{
    Intent i= new Intent(getApplicationContext(),HomeActivity.class);
    startActivity(i);
}

答案 2 :(得分:0)

我发现在不使用onBackPressed的情况下工作的修复是为意图添加一个标志

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

答案 3 :(得分:0)

用于构建假堆栈使用TaskStackBuilder。这将帮助您创建后台堆栈。

假设您的活动是' ActivityA',ActivityBActivityCActivityD。现在你在ActivityBActivityB你想要发起ActivityD并想要一个像这样的后台:

  

ActivityA - > ActivityC - > ActivityD

这意味着从ActivityD返回ActivityC,然后从ActivityC返回ActivityA

ActivityB中,您可以使用此

    TaskStackBuilder.create(this)
            .addParentStack(ActivityA.class)
            .addNextIntent(new Intent(this, ActivityA.class))
            .addNextIntent(new Intent(this, ActivityC.class))
            .addNextIntent(new Intent(this, ActivityD.class))
            .startActivities();

使用TaskStackBuilder你的最小sdk版本应该是16或更高。

对于少于16的sdk,您可以手动签入onBackPressed并启动活动。

在活动D中

  @Override
  public void onBackPressed(){
     Bundle extras = getIntent().getExtras();

     if (extras.containsKey("FROM_ACTIVITY_B_FOR_STACK")){
        // start Activity C
     }else{
        super.onBackPressed();
     }

  } 

对于要添加回堆栈的其他活动