0

これがすでに存在する場合は、前もってお詫び申し上げます。これを理解しようとして、私はこれの断片を見つけましたが、この問題全体と解決策は見つかりませんでした. だから私はコミュニティの残りの人のためにそれを書くと思った.

DatePickerDialogs (および onDateSet() を使用して設定された日付/時刻をキャプチャする方法に関する TimePickerDialogs) には、多くの質問/回答があります。

このダイアログ機能には、バージョン 17 以下のバグのように見えるニュアンスがあり、解決策を見つけました。

これが問題です...

そこに述べられているように、DatePickerDialog を離れるときに設定された日付をキャプチャする場合は、onDateSet() メソッドを記述し、DatePickerDialog でリスナーを設定します (通常は「this」)。例えば:

public static class MyDatePickerFragment extends DialogFragment
        implements DatePickerDialog.OnDateSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        // Create a new instance of DatePickerDialog and return it
        DatePickerDialog dialog =  new DatePickerDialog(getActivity(), **this**, year, month, day);

        return dialog;
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {
            blah blah blah
            do the date setting code
    }
}

これは、MyDatePickerFragment を onDateSet() リスナーとして DatePickerDialog に渡していることに注意してください。

これは、Android バージョン 17 以下で正常に動作します。バージョン 18 以降を試しても、基本的に何も起こりません。あなたの日付セットの活動は失われます。したがって、別の提案 (私が見つけた) は、次のコードを onCreateDialog() に追加することでした。

dialog.setButton(DialogInterface.BUTTON_NEGATIVE, 
                 getString(R.string.btn_cancel),
                 new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which
                            {
                                if (which == DialogInterface.BUTTON_NEGATIVE) {
                                    saved = false;
                                }
                            }
                        });
dialog.setButton(DialogInterface.BUTTON_POSITIVE,
                 getString(R.string.btn_done),
                 new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which
                            {
                                if (which == DialogInterface.BUTTON_POSITIVE) {
                                    saved = true;
                                }
                            }
                        });

これは、バージョン 18 以降でうまく機能します。つまり、これを onCreateDialog() に追加するだけでは、バージョン 17 以下は機能しなくなります。このコード バージョン 17 以下はコメント アウトしてください。入れてよし18歳以上作品。

これを修正するために、次のように実装しました。

if(Build.VERSION.SDK_INT > 17) {
dialog.setButton(DialogInterface.BUTTON_NEGATIVE, 
                     getString(R.string.btn_cancel),
                     new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int which
                                {
                                    if (which == DialogInterface.BUTTON_NEGATIVE) {
                                        saved = false;
                                    }
                                }
                            });
    dialog.setButton(DialogInterface.BUTTON_POSITIVE,
                     getString(R.string.btn_done),
                     new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int which
                                {
                                    if (which == DialogInterface.BUTTON_POSITIVE) {
                                        saved = true;
                                    }
                                }
                            });
}

出来上がり... !! 今では両方とも動作します。これと同じパラダイムが TimePickerDialog でも機能します。

これが役立つことを願っています。

4

1 に答える 1

0

上記の私の答えを参照してください。

申し訳ありませんが、「自分の質問に答える」スペースが今ここにあることを知りませんでした...

于 2015-04-30T22:27:50.497 に答える