1

アプリが初めてロードされたときに実行する基本的なアラーム ダイアログがあります。「onOptionsItemSelected」でオプションが選択されるとアラートが表示され、時間のリストが読み込まれ、デフォルトで「4」が選択された「30 秒」が表示されます。

しかし、ユーザーがそれを開いて設定を変更せずに [OK] をクリックすると、「どの」が私の「notificationChoice」を 4 にする必要がありますが、それは 0 になります。実際に「どの」が 0 を返す位置を選択するまで。 「OK」を押し、通知を再度開き、「OK」をクリックするだけで、「どの」から正しい結果が得られます。これは意図したものですか、それとも何か間違っていますか?

    private void changeNotificationTimer() {

    SharedPreferences settings = PreferenceManager
            .getDefaultSharedPreferences(this);

    String[] timeModes = { "10 Seconds.", "15 Seconds.", "20 Seconds.",
            "25 Seconds.", "30 Seconds.", "45 Seconds.", "1 Minute." };
    final int timerPos = settings.getInt("timerPos", 4);
    System.out.println("timerPos : " + timerPos);

    // Where we track the selected item
    AlertDialog.Builder builder = new AlertDialog.Builder(this);

    // Set the dialog title
    builder.setTitle("Set Notification Timer");

    // Lets set up the single choice for the game mode.
    builder.setSingleChoiceItems(timeModes, timerPos,
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                    notificationChoice = which;
                    System.out.println("which : " + which);
                }
            })
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                    System.out.println("notificationChoice : " + notificationChoice);
                    // Set the shared prefs.
                    if (timerPos != notificationChoice) {
                        System.out.println(timerPos + " != " + notificationChoice);
                        setSharedNotificationPrefs(notificationChoice);
                    }

                }
            }).create().show();

}
4

2 に答える 2

2

いいえ。

onClick(DialogInterface, int)ダイアログのオプションがクリックされたときにトリガーされます。ユーザーが正のボタンを押してもトリガーされません。

私は、notificationChoice が0ダイアログが表示されたときであると推測しているため、timerPos != notificationChoice 合格して 0 が保存されます。notificationChoiceダイアログを表示するtimerPos前にに設定する必要があります。かどうかを確認する必要はありませんtimerPos != notificationChoice。簡単に保存してnotificationChoiceください。

notificationChoice = timerPos;

builder.setSingleChoiceItems(timeModes, timerPos,
        new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

                notificationChoice = which;
                System.out.println("which : " + which);
            }
        })
        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

                System.out.println("notificationChoice : " + notificationChoice);
                // Set the shared prefs.

                System.out.println(timerPos + " != " + notificationChoice);
                setSharedNotificationPrefs(notificationChoice);


            }
        }).create().show();
于 2013-09-28T06:50:01.913 に答える
0

私の問題を理解しました。設定する必要がありました

notificationChoice = settings.getInt("timerPos", 4) 

警告ダイアログの前に、誰もオプションを選択しないというオプションを処理できるようにします。

于 2013-09-28T06:50:10.837 に答える