3

ここ (および他の場所) で、アプリの起動時に表示するアクティビティを動的に選択する方法について説明している記事をいくつか読みました。以下は私のコードです:

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 と Activity を拡張します。最初に表示されるアクティビティの 99% は、RandomClass.getSomeStaticBoolean() に基づく ActivityOften です。

そのため、初めてアイコンからアプリを起動すると、StartupActivity.onCreate 内で中断します。選択は適切に行われます。ただし、その後 (ショートカットまたはアプリ メニューから) アプリを起動しようとすると、ActivityOften が再び表示されます。StartupActivity クラス内でそれ以上の中断は発生しません。RandomClass.getSomeStaticBoolean() の値が変更され、ActivityRare が表示されるはずであることがわかっているにもかかわらず、最初のアクティビティがポップアップし続けます。

何か案は?

ありがとう、メルシー、グラシアス、ダンケ、グラジー!ショーン

4

2 に答える 2

3

これは、アプリケーション アクティビティが履歴スタックから読み込まれるために発生しています。とandroid:noHistory=trueの両方のマニフェストに設定します。それはあなたの問題を解決するはずです。ActivityOftenActivityRare

于 2011-09-30T09:37:42.613 に答える
2

提案として、コンテンツ ビューを動的に選択することで、3 つではなく 1 つのアクティビティを持つことができます。すなわち

@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 ....
    }
}

これは、アクティビティの両方のビューでセットアップ コードを記述する必要があることを意味し、少し面倒になる可能性があります。

于 2011-09-22T07:34:53.990 に答える