Android 转到活动时清除活动堆栈

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

我正在处理一个包含多个活动的应用程序,问题是我希望用户能够通过按下按钮注销

假设我们有4个名为A、B、C、D的活动。活动导航类似于B->C->D

在活动D上,用户具有注销选项。当用户单击注销按钮时,他将转到导航中未调用的活动A。现在,用户单击后退按钮,然后进入上一个活动,如活动D

我已尝试使用以下两个标志启动活动:

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>