java试图在安卓中退出。堆栈未正确清除
我花了好几个小时想清楚为什么栈顶还没有清理干净
我尝试了以下方法:
Intent intent = new Intent(ActionBarActivity.this, MainActivity.class);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
这让我想到了MainActivity
。然后,当我试图按下后退按钮时,程序不会退出,而是将我转到ActionBarActivity
的第一页
让我更具体地说:
在MainActivity
中,我调用ActionBarActivity
。在ActionBarActivity
中,我有一个搜索栏,我在那里输入一个查询,然后只打印查询的值
如果您认为它将如何工作,请参阅以下内容:
MainActivity
->ActionBarActivity1
->ActionBarActivity2
->ActionBarActivity3
->
在这个{
所以,正如我在以上述方式运行应用程序时所说的,它将把我带到MainActivity
到目前为止还不错,但当我按下后退按钮时,我希望它会退出,但它会转到ActionBarActivity1
。我怀疑堆栈没有被正确擦除
在这种情况下我该怎么办。谢谢
# 1 楼答案
我假设你看过这篇帖子:Android: Clear the back stack这不是你想要的
标志_ACTIVITY_NEW_TASK正在创建一个新的任务堆栈。当你点击“back”时,这是该堆栈中唯一的活动,所以Android会转到上一个任务,其中调用活动位于顶部
如果删除该标志,则MainActivity已在任务堆栈中,并被置于顶部。“后退”会将其移除,并将您带回通话活动。到目前为止,这是Android的预期行为
编辑:既然您评论说您只有两个活动,那么一个选项是在启动MainActivity之后执行“finish()”ActionBarActivity,如下所示:
要在许多活动中或仅在某些情况下获得所需的行为,需要使用SET_RESULT并在点击按钮转到MainActivity时完成堆栈中的活动。换句话说,安卓系统假设你想要保持活动,即使新的活动开始了。但在这种情况下,你没有,所以你必须告诉这个活动去摧毁它自己
也就是说,调用setResult(完成),然后使用startActivityForResult,并在onActivityResult方法中检查“完成”标志
然后这个:
变成:
例如,在ActionBarActivity2中:
然后在ActionBarActivity3中:
回到ActionBarActivity2:
等等,当按下按钮时,所有你想“关闭”的活动
# 2 楼答案
试试看
插入
你也应该把它用在每一个让你行动起来的意图上。 我的意思是,如果你要从ActionBarActivity 1回到ActionBarActivity,那么你会有目的地使用它。 然后在所谓的ActionBarActivity中为MainActivity创建意图
祝你好运