Android DatePickerDialog&;TimePickerDialog onXXXSet()版本17+;/-问题
请注意,如果这已经存在,我提前道歉。在试图弄明白这一点的过程中,我发现了其中的一些细节,但从未找到整个问题和解决方案。所以我想我会为社区的其他人写出来 DatePickerDialogs(和TimePickerDialogs)上有很多关于如何使用onDateSet()捕获日期/时间集的问题/答案 我在这个对话框功能中发现了一个细微的差别,它产生了一个类似于17版及以下版本的bug,我找到了一个解决方案 问题是 如前所述,如果您想捕获在离开DatePickerDialog时设置的日期,您可以编写和onDateSet()方法,并在DatePickerDialog上设置侦听器(通常为“this”)。例如:Android DatePickerDialog&;TimePickerDialog onXXXSet()版本17+;/-问题,android,android-datepicker,android-timepicker,datepickerdialog,Android,Android Datepicker,Android Timepicker,Datepickerdialog,请注意,如果这已经存在,我提前道歉。在试图弄明白这一点的过程中,我发现了其中的一些细节,但从未找到整个问题和解决方案。所以我想我会为社区的其他人写出来 DatePickerDialogs(和TimePickerDialogs)上有很多关于如何使用onDateSet()捕获日期/时间集的问题/答案 我在这个对话框功能中发现了一个细微的差别,它产生了一个类似于17版及以下版本的bug,我找到了一个解决方案 问题是 如前所述,如果您想捕获在离开DatePickerDialog时设置的日期,您可以编写和
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()添加以下代码:
这对于任何版本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
我希望这能有所帮助。请参见上面我的答案
很抱歉,我不知道“回答你自己的问题”的空间现在在这里
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;
}
}
});
}