2012-06-22 56 views
1

我有一個Activity_A它有一個註銷選項。點擊我所說的登錄活動。所以當我在登錄活動中點擊設備後退按鈕時,我會回到Activity_A,在那裏我有註銷選項。我想要的是,當我點擊設備後退按鈕時,我登錄活動它必須帶我到設備主屏幕。例如「關閉應用程序」或「清除活動堆棧」。通過重寫設備回退按鈕避免顯示以前的活動

我嘗試這樣做:

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

,但它沒有工作,我也嘗試使用面漆()INT上面的代碼,那麼就需要我Activity_A之前,我叫(如預期)的活動。

我搜索了我的案例,並找不到完美的解決方案,有人可以幫我實現我想要的嗎?

和我有一個想法覆蓋設備後退按鈕onClick我的登錄活動,以便它顯示設備的主屏幕,並清除所有的活動堆棧....有可能嗎?如果是的話,它安全嗎?

這是我在LoginActivity已經做到了,這工作就像我想

public void onBackPressed() { 
    // TODO Auto-generated method stub 
    super.onBackPressed(); 

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

但是否有任何其他方式不中重寫onBackPressed來實現這一()?

回答

2

您需要覆蓋按鈕事件back並在那裏執行所有需要的操作。

@Override 

    public void onBackPressed() { 
     //do whatever you desire 
     return; 
    } 
+0

呼叫this.finish();在onBackPressed()中終止當前活動。 – iNan

+0

當您開始「登錄活動」時,在'Activity_A'中調用'finish()'。這樣,'Activity_A'將被清除,當你在'登錄活動'上按'back'時,你將被帶回到主屏幕。 –

+0

是的,但考慮一個案例,我去A ---> B ----> C ---> D,A是我的登錄活動,D是我的註銷活動,現在如果我添加完成();在活動D和使用設備後面的登錄活動,我將最終在活動C權利?? ...不是主屏幕....如果我寫完();在所有的活動....我不能從D回到C,C到B或B到A這是不是我想要的 –

1

嘗試使用startActivityForResult

在Activity_A:

Intent intent = new Intent(Activity_A.this, LoginActivity.class); 
startActivityForResult(intent,0); 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == 0) { 
     this.finish(); 
    } 
} 
在LoginActivity

LoginActivity.this.setResult(0); 
相關問題