我需要在我的应用程序中构建一个虚假的后台堆栈。我正在使用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);
答案 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',ActivityB
,ActivityC
,ActivityD
。现在你在ActivityB
和ActivityB
你想要发起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();
}
}
对于要添加回堆栈的其他活动