0

最初に私のアプリについて少し。そのクイズアプリ。質問を表示するメイン画面があり、すぐに読み込まれ、矢印が表示previousnextれ、他のクイズの質問に移動します。異なる質問データを渡すだけで同じレイアウトを何度も使用しているので、[次へ]ボタンをクリックするintentと、同じクラスが異なるデータで起動します。私の単一のレイアウトの開始時に、ユーザーが免責事項を非表示にするためにクリックしたかどうかを確認するための少しのチェックがあります。

そのため、アプリの起動時に免責事項が表示されます。dismissボタンとDont show this againチェックボックスがあります。を使用してチェックボックスを完全に機能させることができますSharedPreferencesが、ボタンを押すと問題が発生しDismissます。同じレイアウトを再利用しているため、ユーザーが新しい質問に移動するたびに、免責事項が表示されます。アプリが読み込まれたときなど、最初の画面にのみポップアップ表示したい。

SharedPreference ユーザーがヒットしたときに免責事項を非表示にするように別の設定を試みましdismissたが、一度非表示にすると、ユーザーがアプリを再度ロードしたときにその共有設定が設定されたままになるため、元に戻りません。私の問題は、設定をどこに戻すかを知ることです!リセットしてみましonPause()たが、うまくいきませんでした。

それで、私が求めているのは、アクティビティが最初にロードされるアクティビティであるかどうかをどのように判断できるので、その後の各画面ではなく、免責事項のチェックのみを実行できますか?

ありがとう。

編集:これが私のOnCreate()方法です:

final static String disclaimerShownPref = "disclaimerShown";
final static String disclaimerShownOnce = "disclaimerShownThisSession";

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

    mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
    //Checks to see if the boolean is set
    //The second argument is the default to use if the preference can't be found
    if(!mPrefs.getBoolean(disclaimerShownPref, false))
    {
        if(!mPrefs.getBoolean(disclaimerShownOnce, true))
        {
            new Disclaimer(this);
        }
    }

    topMostLayout=buildHomeScreen();
    setContentView(topMostLayout);
}
4

3 に答える 3

1

あなたの場合、私はあなたの活動で静的変数を使用することを提案します:

private static boolean sFirstTime = true;

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

    setContentView(R.layout.main);

    if( sFirstTime )
    {
        /*
         * Place the disclaimer check here 
         */
        sFirstTime = false;
    }
    else
    {

    }

そうは言っても。毎回新しい質問を作成するのではなく、アクティビティの同じインスタンスで質問を切り替えるためのより良いアプローチを検討します。

幸運を!

于 2012-06-01T17:52:00.817 に答える
0

インテントを使用してアクティビティの新しいバージョンを起動する代わりに、onClickListenerを使用してsetText()を呼び出し、表示の質問を変更してみませんか?これにより、アクティビティのライフサイクルがより直感的になり、コードが単純化される可能性があります。

于 2012-06-02T15:32:51.703 に答える
0

ユーザーが質問間を移動するたびにアクティビティを再開するのではなく、前または次がクリックされたときにビューに新しい質問データを再入力する関数を作成する必要があります。免責事項については、アプリを起動するたびに表示したい場合は、共有設定を使用して変数を設定するのが最善の方法ではありません。共有設定は、アプリを閉じても削除されません。手動で消去するか、アプリケーションを完全にアンインストールした場合にのみ削除されます。代わりに、「閉じる」がクリックされたかどうかを追跡する変数をアクティビティに作成します。アプリが実行されている限り、ダイアログは表示されませんが、アプリを再起動すると、ダイアログの表示を追跡している変数を含むすべての変数がリセットされ、再び表示されます。

于 2012-06-01T18:07:56.053 に答える