Arc*_*pgc 104 android back-stack
当我点击我的个人资料活动中的退出按钮时,我想将用户带到登录页面,他需要使用新的凭据.
因此我使用了这段代码:
Intent intent = new Intent(ProfileActivity.this,
LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
在" onButtonClick注销"按钮中.
但问题是,当我点击登录活动上的设备后退按钮时,它会将我带到ProfileActivity.当我按下LoginActivity上的设备后退按钮时,我希望应用程序关闭.
我究竟做错了什么?
我还在LoginActivityandroid:launchMode="singleTop"的清单中添加了
谢谢
kgi*_*kis 269
这里提出的解决方案对我有用.
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);
Run Code Online (Sandbox Code Playgroud)
但是,它需要API级别> = 11.
Anu*_*kur 31
以下是使用注销按钮清除所有应用程序活动的一种解决方案.
每次启动Activity时,都会这样启动:
Intent myIntent = new Intent(getBaseContext(), YourNewActivity.class);
startActivityForResult(myIntent, 0);
Run Code Online (Sandbox Code Playgroud)
如果要关闭整个应用,请执行以下操作:
setResult(RESULT_CLOSE_ALL);
finish();
Run Code Online (Sandbox Code Playgroud)
RESULT_CLOSE_ALL是一个最终的全局变量,带有一个唯一的整数,表示您要关闭所有活动.
然后定义每个活动的onActivityResult(...)回调,这样当一个活动返回RESULT_CLOSE_ALL值时,它还会调用finish():
@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);
}
Run Code Online (Sandbox Code Playgroud)
这将导致级联效果,关闭所有活动.
然而,这是一种黑客攻击,并且其使用startActivityForResult方式不是为了使用而设计的.
也许更好的方法是使用如下所示的广播接收器:
注销时,清除活动历史记录堆栈,阻止"后退"按钮打开仅登录的活动
有关其他方法,请参阅以下线程:
Mat*_*ola 17
要完全清除活动堆栈,您需要使用TaskStackBuilder创建新的任务堆栈,例如:
Intent loginIntent = LoginActivity.getIntent(context);
TaskStackBuilder.create(context).addNextIntentWithParentStack(loginIntent).startActivities();
Run Code Online (Sandbox Code Playgroud)
这不仅会创建一个新的,干净的任务堆栈,如果您的LoginActivity具有父活动,它还将允许"up"按钮正常运行.
Anu*_*ava 15
finishAffinity()在API 16中添加.ActivityCompat.finishAffinity()在以前的版本中使用.当您使用intent启动任何活动并完成当前活动时.现在 ActivityCompat.finishAffinity()改用finish().它将完成当前活动以下的所有堆叠活动.这对我来说可以.
Mon*_*idi 10
什么对我有用
Intent intent = new Intent(getApplicationContext(), HomeActivity.class);
ComponentName cn = intent.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);
startActivity(mainIntent);
Run Code Online (Sandbox Code Playgroud)
我可以建议您的一种可能的解决方案是android:launchMode="singleTop"为我的ProfileActivity添加清单。当单击注销 时,您可以注销重新开始您的LoginActivity。
在注销时,您可以调用它。
Intent in = new Intent(Profile.this,Login.class);
in.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(in);
finish();
Run Code Online (Sandbox Code Playgroud)
对于API 11+,您可以这样使用Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK:
Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
它将完全清除所有先前的活动并开始新的活动.
| 归档时间: |
|
| 查看次数: |
127057 次 |
| 最近记录: |