2011-09-22 28 views
3

我已閱讀了一些文章(以及其他地方),介紹瞭如何在啓動應用程序時動態選擇要顯示的活動。下面是我的代碼:Android:動態選擇啓動活動並不總是有效

AndroidManifest.xml中

<activity android:name=".StartupActivity" 
      android:theme="@android:style/Theme.NoDisplay"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

StartupActivity.java

public class StartupActivity extends Activity 
{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     Intent intent; 
     if (RandomClass.getSomeStaticBoolean()) 
     { 
      intent = new Intent(this, ActivityOften.class); 
     } 
     else 
     { 
      intent = new Intent(this, ActivityRare.class); 
     } 
     startActivity(intent); 
     finish(); 
    } 
} 

兩個ActivityOften和ActivityRare都在清單中聲明(當然沒有發射類別)和擴展ListActivity和活動分別。 99%的時間顯示的第一個活動是基於RandomClass.getSomeStaticBoolean()的ActivityOften。

因此,第一次從圖標啓動我的應用程序時,我在StartupActivity.onCreate內部進行了分解。選擇正確。但隨後嘗試啓動應用程序(從快捷方式或應用程序菜單)再次顯示ActivityOften。 StartupActivity類內不會出現進一步的中斷。儘管我知道RandomClass.getSomeStaticBoolean()已經改變了值並且該ActivityRare應該出現,但第一個活動不斷彈出。

任何想法?

謝謝,Merci,Gracias,Danke,Grazie! 肖恩

回答

2

就像一個建議,你可以只有一個活動,而不是三個,通過動態選擇內容視圖。即

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 

    if (RandomClass.getSomeStaticBoolean()) 
    { 
     setContentView(R.layout.Often); 

     // Set up often .... 
    } 
    else 
    { 
     setContentView(R.layout.Rare); 

     // Set up rare .... 
    } 
} 

這意味着你必須在活動中寫入設置代碼兩個視圖,這可能會有點混亂。

+0

這是可能的,但每個活動類都有很多代碼。我會嘗試這種方法,但寧願如果可能不將所有代碼混合到一個文件中。感謝您的輸入!將保持你的成功呢... –

+1

最後,我決定去用ViewFlipper。 在http://www.androidpeople.com/android-viewflipper-example發現示例 我嘗試了上述想法,但在切換視圖時,Android引發了異常。有一種方法可以在充氣和設置另一個之前刪除視圖。最終,我去了ViewFlipper。另外,我讓我的Activity成爲一個單一的實例活動(這樣可以避免在打開另一個時打開另一個異常並關閉頂部,然後在堆棧中的下一個控件上使用控件)。 –

3

這是因爲您的應用程序活動是從歷史堆棧中加載的。 在清單中爲ActivityOftenActivityRare設置android:noHistory=true。這應該可以解決你的問題。

+0

爲真。使用後,它每次都正確地重新創建。但現在它不再在活動堆棧上,這對我的情況沒有太大的幫助。謝謝您的幫助!! –