2010-08-27 106 views
4

我的應用程序以歡迎屏幕活動開始,但該屏幕有一個選項可以在將來的發佈中完全跳過該屏幕。Android:根據用戶偏好設置不同的開始活動

什麼是適當的Android方式來做到這一點?最初,我只是自動檢測到skipWelcome偏好,然後切換到Welcome的第二個活動。但是這具有讓用戶按下後退按鈕到我們承諾永不再顯示的歡迎屏幕的效果。

眼下,在歡迎活動中,我閱讀偏好和調用finish()對當前活動:

SharedPreferences preferences = getPreferences(MODE_PRIVATE); 
    boolean skipWelcome = preferences.getBoolean("skipWelcome", false); 

    if (skipWelcome) { 
     this.finish(); 
    } 

然後我執行的onDestroy就移動到下一個活動:

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    startActivity(new Intent(Welcome.this, StartFoo.class)); 
} 

但是這使得一些奇怪的視覺過渡。我開始認爲我需要一個基本的Activity,只有在正確的時候纔會打開Welcome,然後轉到StartFoo。

回答

2

有幾個解決方案。

您是否嘗試啓動活動並完成?我記得那個工作,但我可能是錯的。

更正確,如果在(skipWelcome)就可以開始新的活動,結果,那麼當onActivityResult被調用時,immidiately完成了歡迎活動。

或者,您可以讓您的啓動器活動沒有視圖(不要設置內容),並啓動歡迎活動或StartFoo。

5

我不能評論Mayra的答案,或者我會(沒有足夠的代表),但這是正確的方法。

的Android文檔中隱藏爲Activity.startActivityForResult()這一重要短語,

「作爲一個特殊情況,如果調用 startActivityForResult()與初始 的onCreate期間 requestCode> = 0(捆綁 您的窗口將不會顯示 ,直到 從開始的活動返回 這是爲了避免可見的閃爍,當 重定向克到另一個活動。「

另外要注意的是,此調用不會阻止並繼續執行,所以你需要通過返回

if (skipWelcome) { 
    // Create intent 
    // Launch intent with startActivityForResult() 
    return; 
} 

最後一塊停止的onCreate的執行是立即撥打結束在歡迎活動的onActivityResult,正如Mayra所說。

+0

不適合我。仍然可以看到閃爍 – png 2017-11-03 16:54:53