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