我去活动时清除活动堆栈

时间:2011-07-05 16:13:41

标签: android

我正在开发一个包含多个活动的应用程序,问题是我希望用户能够通过按下按钮退出。

假设我们有4个名为A,B,C,D的活动。活动的导航如B-> C-> D。

在活动D上,用户可以选择退出。当用户单击“注销”按钮时,他将转到活动A,该活动未在导航中调用。现在,用户点击后退按钮然后他进入了活动D之前的活动。

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

Intent intent = new Intent(this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);        
startActivity(intent);

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:4)

好吧,我为自己制作了一个小项目来模拟你拥有的东西。我将在下面的代码中省略导入。另外,阅读所有代码和注释,我没有写它们让你跳过它们。让我们调用类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!
    }
}

现在那是你的闪屏!完成!对于登录屏幕,我们要确保它不能返回到启动画面,而是在按下后退出应用程序。这很简单!我们只需覆盖后退按钮并使用moveTaskToBack(true)

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);}
    }
}

现在,已经完成了!让我们转到您的第一页(您登录后转到的页面)并在onCreate()方法中添加一行

splash.loggedin = true;

您可能需要考虑让用户退出此页面,也可以将其注销。没必要,但肯定可行。

当用户使用注销按钮注销时,您需要做的最后一件事是将该变量设置为false。因此,在按钮的代码中,在再次启动登录活动的调用之前,只需添加splash.loggedin = false;。现在,当单击该按钮时,它将记录用户,将变量设置为false,并将它们带到登录屏幕。就像我说的那样,我通过简单的布局和活动之间的真正基本切换来测试它,它对我来说很好。

答案 1 :(得分:3)

请在您的活动D退出活动中尝试此操作。

 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>

答案 2 :(得分:1)

尝试

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

您可以通过第二次调用删除FLAG_ACTIVITY_NEW_TASK。

答案 3 :(得分:1)

最后这段代码对我有用.......

当我按下登录活动上的后退按钮,然后我转到Android设备的主屏幕。

Intent intent= new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);