2011-01-31 126 views
43

有沒有一種方法可以根據條件動態更改Android中的開始活動?我試圖做(沒有工作)是以下幾點:Android中的動態啓動活動?

  1. 刪除在我的AndroidManifest.xml
  2. 定義創建一個自定義應用程序類應用程序使用
  3. 覆蓋的發射器類別我的應用程序類的onCreate方法定義如下的一些代碼:

if (condition) { 
    startActivity(new Intent(this, MenuActivity.class)); 
} else { 
    startActivity(new Intent(this, LoginActivity.class)); 
} 
+3

正是我所搜索的,謝謝你已經問過這個問題。 – mad 2011-02-14 08:38:54

回答

56

爲什麼不能有一個初步的Activity沒有用戶界面,檢查條件的onCreate,然後啓動下一個Activity,然後在本身調用finish()?我從來沒有從onCreate()內撥打過finish(),所以我不確定這是否可行。

編輯
似乎工作正常。這裏有一些代碼可以使它更清晰。
初始Activity

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Intent intent; 
    if (condition) { 
     intent = new Intent(this, ClassA.class); 
    } else { 
     intent = new Intent(this, ClassB.class); 
    } 
    startActivity(intent); 
    finish(); 
    // note we never called setContentView() 
} 

其他Activity

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
} 
+0

你有沒有用戶界面的活動?我認爲活動的重點是向用戶展示一些東西,但也許我需要重新閱讀Android基礎知識...... – 2011-01-31 22:00:44

+1

@Matt Huggins我只是在我的臨時工作區嘗試過它,它似乎工作正常。 – 2011-01-31 22:08:54

8

這是我親自做我的小的移動項目之一。而不是創建一個單獨的,畫面不太Activity中條件並啓動相應的屏幕,我把情況一Activity,做了動態setContentView(),如:這種方法

if (!userIsLoggedIn) { 
    setContentView(R.layout.signup); 
} else { 
    setContentView(R.layout.homescreen); 
} 

兩個重要注意事項:

1:不要在onCreate()中編寫該文件,而應該在onResume()的範圍內進行決策,因爲只要屏幕需要顯示在前面,就會始終調用後者。你可以從Android activity life cycle看到。因此,例如,如果用戶剛剛下載我的應用程序並首次啓動它,因爲沒有用戶登錄,她將被引導至註冊頁面。當她完成註冊並由於某種原因按下HOME按鈕(不是BACK,完全退出應用程序!),然後恢復應用程序,她將看到的佈局已經是主屏幕。如果我在onCreate()內部添加條件,那麼會顯示的是註冊屏幕,因爲根據生命週期,當將應用程序返回到前臺時,它不會返回到onCreate()

2:該解決方案只有在合併這兩個活動的功能時纔是理想的,不會產生長長的惡魔般的代碼塊。就像我說的,我的項目是一個小型項目(其主要功能發生在後臺),因此單個動態項目沒有太多內容。無屏幕的Activity絕對是如果你需要你的代碼更易於閱讀的方式。