2011-09-19 20 views
0

此帖有很多主題。但我找不到解決我的問題。用戶登錄時清除活動堆棧

讓我首先描述我的activity堆棧。

SplashScreen-> A-> Login-> Home。

什麼,我想實現的是,當我點擊back按鈕登錄到Home後,我應該站出來的應用程序,並轉到Home,如果我再次用我的應用程序。爲此,我假設我應該在主頁之前清除活動堆棧,在我登錄後。如果用戶尚未登錄,我還想保留活動堆棧。

我想要這個或以後的工作2.1

我已經試過了。

  1. 使用finish()Login活動,對Home調用startActivity之前。這會將我重定向到A,如果我在Home上使用後退按鈕。

  2. FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_CLEAR_TOP的所有變體。沒有任何工作,當我使用後退按鈕,我重定向到登錄屏幕。

任何建議或簡單的解決方案來實現這一目標?

回答

0

使用finish()Login活動,對Home調用startActivity之前。這會將我重定向到A,如果我在Home上使用後退按鈕。

確定所以使用完成所有你希望他們呼籲startActivity

Home,如果我再次用我的應用程序

您只需保存之前彈出活動登錄參數SharedPreference,如果登錄成功,則直接從A startActivity Home登錄。

+0

我如何完成所有活動? ,通過重寫startActivityForResult()? –

+0

不......你說在調用home上的startActivity之前在登錄活動中使用完成工作正常,後退按鈕重定向到A而不是登錄活動...因此,在你所有不需要的活動中都做同樣的事情。例如,如果你不想要A,在調用startActivity之前使用finish()登錄 –

+0

但我想保存我的堆棧,如果用戶還沒有登錄。 –

0

您也可以嘗試使用BroadcastReceiver以及如果您想嘗試該路線。

在你的「閃屏」和「A」的活動,在onCreate方法,你可以創建並註冊和IntentFilterBroadcastReceiver像這樣:

假設你有一個名爲全局變量broadcastReceiver

IntentFilter intentFilter = new IntentFilter(); 
intentFilter.addAction("ACTION_LOGIN"); 

       this.broadcastReceiver = new BroadcastReceiver() { 

        @Override 
        public void onReceive(Context context, Intent intent) { 
         finish(); 
        } 
       }; 

       registerReceiver(broadcastReceiver, intentFilter); 

另外不要忘記在onDestroy方法(這是爲了防止程序中的內存泄漏)取消註冊您的接收器:

@Override 
    protected void onDestroy() { 
    unregisterReceiver(this.broadcastReceiver); 
    super.onDestroy(); 
    } 

現在,在您的「登錄」活動,一旦用戶成功登錄後,你可以廣播消息給所有註冊接收機,這將結束那些activites在後面堆棧:

Intent broadcastIntent = new Intent(); 
broadcastIntent.setAction("ACTION_LOGIN"); 
sendBroadcast(broadcastIntent); 

你的閃屏和一項活動現在將完成。