当我在我的个人资料活动中点击注销按钮时,我想把用户带到登录页面,在那里他需要使用新的凭证。
所以我用了这个代码:
Intent intent = new Intent(ProfileActivity.this,
LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
在on按钮中,单击注销按钮的
。
但问题是,当我点击登录活动上的设备返回按钮时,它会把我带到Profile活动。我期待的应用程序应该关闭时,我按下设备返回按钮上的登录活动。
我做错了什么?
我还在清单中为我的登录活动添加了android:launchMode=“singleTop”
非常感谢。
要完全清除活动堆栈,您需要使用TaskStackBuilder创建新的任务堆栈,例如:
Intent loginIntent = LoginActivity.getIntent(context);
TaskStackBuilder.create(context).addNextIntentWithParentStack(loginIntent).startActivities();
这不仅将创建一个新的、干净的任务堆栈,如果您的LoginActivity有父活动,它还将允许“向上”按钮正常工作。
这里有一个解决方案,可以在使用注销按钮时清除应用程序的所有活动。
每次启动活动时,请按以下方式启动:
Intent myIntent = new Intent(getBaseContext(), YourNewActivity.class);
startActivityForResult(myIntent, 0);
如果要关闭整个应用程序,请执行以下操作:
setResult(RESULT_CLOSE_ALL);
finish();
结果_CLOSE _ALL是最后一个全局变量,带有唯一的整数,表示要关闭所有活动。
然后定义每个活动的onActivityResult(...)
回调,这样当一个活动返回RESULT_CLOSE_ALL值时,它也调用over()
:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(resultCode)
{
case RESULT_CLOSE_ALL:
setResult(RESULT_CLOSE_ALL);
finish();
}
super.onActivityResult(requestCode, resultCode, data);
}
这将导致级联效应,关闭所有活动。
然而,这是一种黑客行为,它使用的startActivityForResult
方式不是设计用来使用的。
也许更好的方法是使用广播接收器,如下所示:
注销时,清除活动历史堆栈,防止“后退”按钮打开仅登录的活动
有关其他方法,请参见以下线程:
Android:清除后栈
完成之前的所有活动
这里提出的解决方案对我有效:
Intent i = new Intent(OldActivity.this, NewActivity.class);
// set the new task and clear flags
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);
val i = Intent(this, NewActivity::class.java)
// set the new task and clear flags
i.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
startActivity(i)
但是,它需要API级别
好吧,所以我有点困惑该怎么处理这个。因此,我有了主活动,从那里可以启动一个活动到DegreePlan活动,从那里可以启动另一个活动到EditDegreeplan。我已经将EditDegreeplan设置为在Android清单中没有历史记录。问题是在他们保存EditDegreeplan后,它会启动一个活动到Degreeplan。因此,如果用户按下后退键,他们必须按两次才能再次进入主活动。我想摆脱它,
我希望当用户按下后退按钮时,我的活动从后退堆栈中清晰可见。我正在使用此意图来打开我的活动: 我希望当我按下后退按钮时,我的OutGoingActivity活动将从堆栈中删除。 每当我启动我的活动时,一个新的活动应该被打开,而不是从堆栈中打开。
假设我有以下层次结构: 1级活动(例如主菜单) 2级活动(如日历) 3级活动(如日历日) 存在以下用例: 深入人心 需要以下过渡行为: 用例1 3:我希望旧活动从左侧滑出,新活动从右侧滑入 用例2:我希望旧活动滑出到右侧,新活动滑入到左侧 我尝试了很多方法来使用来实现这一点,但没有一个组合可以正常工作...我被以下内容卡住了: 动画(这些应该正常工作): SlideFromLeftIn: Slid
问题内容: 我正在尝试转储所有活动线程的列表,包括每个线程的当前堆栈。我可以使用threading.enumerate()获得所有线程的列表,但是我不知道从那里到堆栈的方法。 背景:Zope / Plone应用程序有时会出现故障,消耗100%的cpu,需要重新启动。我觉得这是一个循环,无法正常终止,但是我无法在test- environemt中重现该循环以进行验证。我设法注册了可以从外部触发的信号
前提条件: AndroidQ 问题一: 我在前台有一个视图,当用户单击该视图时,我尝试在android Q中启动一个活动。 以下是我的代码。 它不工作,也不会发生碰撞。我有一些日志。 D ActivityTaskManagerServiceInjector: MIUILOG-权限拒绝活动:意图... 问题2: 我有一个TileService,当用户单击状态栏中的图标时,我尝试启动一个活动 雄激素单
我有一个数组: 我调用它的拼接函数来删除索引之前的所有项: 我只是好奇有没有类似于splice的功能来移除一个索引后的所有项目: 伪码