Android 转到活动时清除活动堆栈
我正在处理一个包含多个活动的应用程序,问题是我希望用户能够通过按下按钮注销 假设我们有4个名为A、B、C、D的活动。活动导航类似于B->C->D 在活动D上,用户具有注销选项。当用户单击注销按钮时,他将转到导航中未调用的活动A。现在,用户单击后退按钮,然后进入上一个活动,如活动D 我已尝试使用以下两个标志启动活动:Android 转到活动时清除活动堆栈,android,Android,我正在处理一个包含多个活动的应用程序,问题是我希望用户能够通过按下按钮注销 假设我们有4个名为A、B、C、D的活动。活动导航类似于B->C->D 在活动D上,用户具有注销选项。当用户单击注销按钮时,他将转到导航中未调用的活动A。现在,用户单击后退按钮,然后进入上一个活动,如活动D 我已尝试使用以下两个标志启动活动: Intent intent = new Intent(this, LoginActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY
Intent intent = new Intent(this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
有人能帮忙吗?试试看
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
通过第二次调用,您可以删除FLAG\u ACTIVITY\u NEW\u TASK。好的,我为自己制作了一个小项目,以模拟您所拥有的。我将在下面的代码中省略导入。另外,阅读所有的代码和注释,我写它们不是为了让你跳过它们。让我们调用splash、login、page1、page2和page3类。在您的splash类中,在onCreate()方法之前,让我们先介绍一些内容
package com.test.jeets;
public class splash extends Activity {
//Add all of these right here!
public static boolean loggedin = false;
public static int sdk = new Integer(Build.VERSION.SDK).intValue();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
//This is your splash screen, all the code goes here!
}
}
这就是你的闪屏!完成!对于登录屏幕,我们希望确保它不能返回初始屏幕,而是在按下back时退出应用程序。那很容易!我们只需覆盖后退按钮并使用moveTaskToBack(true)
您可能想考虑让用户退出这个页面,也可以将它们注销出来。没有必要,但肯定能做到
您需要做的最后一件事是,当用户使用注销按钮注销时,将该变量设置为false。因此,在按钮的代码中,在调用再次启动登录活动之前,只需添加
splash.loggedin=false代码>。现在,当单击按钮时,它将注销用户,将变量设置为false,并将它们带到登录屏幕。正如我所说,我用一个简单的布局和活动之间真正的基本切换测试了这一点,它对我很好。请在您的活动D注销事件中尝试这一点
按钮按钮=(按钮)findViewById(R.id.btnLogout);
setOnClickListener(新视图.OnClickListener(){
@覆盖
公共void onClick(视图arg0){
//TODO自动生成的方法存根
意向意向=新意向(上下文,ActivityA.class);
intent.setFlags(intent.FLAG\u ACTIVITY\u CLEAR\u TOP);
背景。开始触觉(意图);
}
});
最后,这段代码对我有用
当我按下登录活动上的后退按钮时,我会进入android设备的主屏幕
Intent意图=新意图(Intent.ACTION\u MAIN);
intent.addCategory(intent.CATEGORY_HOME);
intent.setFlags(intent.FLAG\u活动\u新任务);
星触觉(意向)代码>谢谢您的回复,但它不起作用。您有其他解决方案吗?这对我很有效。。。我用相同的标志启动了一个仪表板活动。它对我不起作用,当我按下后退按钮时,我进入的不是注销活动,而是它的priviuos活动。如果您有其他解决方案,请回复我。但对于我来说,当我按下登录活动上的后退按钮时,我有飞溅活动,然后我可以退出应用程序,但当我再次启动应用程序时,我没有看到飞溅活动,我从登录活动开始。因此,当我再次启动应用程序时,我希望看到启动屏幕。请帮助我,如果你能给我另一个建议。在结尾添加一点应该会有帮助。我不知道如何使用它。请帮助我,我正面临这个问题。现在我们想要的是,如果他们从登录屏幕离开应用程序,回到启动屏幕。无论您何时离开登录屏幕。也许更合适的做法是:@Override public void onPause(){Intent i=new Intent(LoginActivity.this,SplashScreen.class);startActivity(i);}
一旦安装了SDK和ADT插件,我就会给出一个示例。我已经尝试过了。如果你还有其他选择,请告诉我。
package com.test.jeets;
public class login extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
//This is the login page stuff. Nothing special needs done here.
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (splash.sdk < 5 && keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
onBackPressed();
}
return super.onKeyDown(keyCode, event);
}
//This will make the back button exit the app to the home screen.
@Override
public void onBackPressed() {
moveTaskToBack(true);
return;
}
//If the user leaves the app from the login screen while not logged in, they are returned to the splash screen.
@Override
public void onRestart() {
super.onRestart();
if(splash.loggedin == false){
Intent i = new Intent(login.this, splash.class);
startActivity(i);}
}
}
splash.loggedin = true;
Button button=(Button)findViewById(R.id.btnLogout);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent=new Intent(context,ActivityA.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);
}
});</PRE>