2011-07-05 59 views
3

我正在处理一个具有多个活动的应用程序,问题是我希望用户能够通过按下按钮注销。当我去一个活动时清除活动堆栈

假设我们有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); 

谁能帮助?

回答

4

好吧,我让自己成为一个小项目,有点模拟你有什么。我将在下面的代码中省略进口。另外,阅读所有的代码和评论,我没有写他们让你跳过它们。我们称之为类飞溅,登录,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,并将它们带到登录屏幕。就像我说过的,我测试了这个简单的布局和活动之间的真正的基本切换,它对我来说工作得很好。

+0

但是在我的情况下,当我按下登录活动上的按钮时,我会进行初始活动,然后我能够退出应用程序,但是当我再次启动应用程序时,我没有看到启动活动,我从登录活动开始。因此我想在再次启动应用程序时看到启动画面。请帮助我,如果你能给我另一个建议。 – Jitendra

+0

在最后添加一点,应该有所帮助。 – Rob

+0

我不确定如何使用它。请帮助我,我正面临着这个问题。 – Jitendra

1

尝试

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

您可以通过第二个呼叫删除FLAG_ACTIVITY_NEW_TASK。

+0

感谢您的回复,但它不工作。您有另一种解决方案吗? – Jitendra

+0

适用于我...我使用相同的标志启动仪表板活动。 –

+0

这不是我的工作,当我按下按钮,然后我去注销活动,但它的priviuos活动。如果您有其他解决方案,请回复我。 – Jitendra

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>
+0

我试过了。如果您有其他选择,请让我知道。 – Jitendra

1

最后此代码为我工作.......

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

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