在 DatePickerDialog 中实现 OnClickListener 做某事不起作用
Implement OnClickListener in DatePickerDialog to do something is not working
我正在尝试创建 DatePickerDialog 来更改 TextView。但我还想在用户单击 "Ok" 按钮时显示 Toast。
所以,我实现了 DatePickerDialog.OnClickListener
和 DatePickerDialog.OnDateSetListener
并且我重写了这两个方法。但是当我单击 DatePicker 上的 "Ok" 按钮时没有任何反应。有什么想法吗?
提前致谢,这是我的 DatePickerFragment :
@RequiresApi(api = Build.VERSION_CODES.N)
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener, DatePickerDialog.OnClickListener {
public static int year_x;
public static int month_x;
public static int day_x;
public static Calendar calendar = Calendar.getInstance(Locale.FRANCE);
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance(Locale.FRANCE);
final int year = c.get(Calendar.YEAR);
final int month = c.get(Calendar.MONTH);
final int day = c.get(Calendar.DAY_OF_MONTH);
DatePickerDialog dialog = new DatePickerDialog(getActivity(), this, year, month, day);
/*
// When I do that way and not implement DatePickerDialog.OnClickListener the date is not updated in my TextView switcherDateDay
dialog.setButton(DialogInterface.BUTTON_POSITIVE, "ok", new DialogInterface.OnClickListener() {
@SuppressLint("ShowToast")
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getActivity(), "Test", Toast.LENGTH_LONG).show();
}
});
*/
return dialog;
}
@Override
public void onClick(DialogInterface dialog, int which) {
if(which == DialogInterface.BUTTON_POSITIVE) {
Toast.makeText(getActivity(), "Date is selected", Toast.LENGTH_LONG).show();
}
}
@TargetApi(Build.VERSION_CODES.N)
@RequiresApi(api = Build.VERSION_CODES.M)
public void onDateSet(DatePicker view, int year, int month, int day) {
year_x = view.getYear();
month_x = view.getMonth();
day_x = view.getDayOfMonth();
calendar.set(year_x, month_x, day_x);
ScheduleCalendar scheduleCal = new ScheduleCalendar(calendar, 0);
TextView switcherDateDay = (TextView) getActivity().findViewById(R.id.schedule_switcher_date);
TextView switcherCurrentDay = (TextView) getActivity().findViewById(R.id.schedule_switcher_current_day);
switcherDateDay.setText(String.format("%s %s %s", scheduleCal.getDayName(), scheduleCal.getDayNo(), scheduleCal.getMonthName()));
switcherCurrentDay.setText(ScheduleSwitcherFragment.statueOfWeek(scheduleCal));
}
}
在日期选择器对话框的 onDateSet 方法中显示您的 Toast
如果你想这样做,我相信你需要实现 DialogInterface.OnClickListener()(而不是 DatePickerDialog.OnClickListener())。尽管我不确定您为什么不按照 OnCreateDialog 方法中注释掉的代码中的方式进行操作。
此外,您仍然需要将 OnClickListener 添加到您希望捕获点击的按钮。
我正在尝试创建 DatePickerDialog 来更改 TextView。但我还想在用户单击 "Ok" 按钮时显示 Toast。
所以,我实现了 DatePickerDialog.OnClickListener
和 DatePickerDialog.OnDateSetListener
并且我重写了这两个方法。但是当我单击 DatePicker 上的 "Ok" 按钮时没有任何反应。有什么想法吗?
提前致谢,这是我的 DatePickerFragment :
@RequiresApi(api = Build.VERSION_CODES.N)
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener, DatePickerDialog.OnClickListener {
public static int year_x;
public static int month_x;
public static int day_x;
public static Calendar calendar = Calendar.getInstance(Locale.FRANCE);
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance(Locale.FRANCE);
final int year = c.get(Calendar.YEAR);
final int month = c.get(Calendar.MONTH);
final int day = c.get(Calendar.DAY_OF_MONTH);
DatePickerDialog dialog = new DatePickerDialog(getActivity(), this, year, month, day);
/*
// When I do that way and not implement DatePickerDialog.OnClickListener the date is not updated in my TextView switcherDateDay
dialog.setButton(DialogInterface.BUTTON_POSITIVE, "ok", new DialogInterface.OnClickListener() {
@SuppressLint("ShowToast")
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getActivity(), "Test", Toast.LENGTH_LONG).show();
}
});
*/
return dialog;
}
@Override
public void onClick(DialogInterface dialog, int which) {
if(which == DialogInterface.BUTTON_POSITIVE) {
Toast.makeText(getActivity(), "Date is selected", Toast.LENGTH_LONG).show();
}
}
@TargetApi(Build.VERSION_CODES.N)
@RequiresApi(api = Build.VERSION_CODES.M)
public void onDateSet(DatePicker view, int year, int month, int day) {
year_x = view.getYear();
month_x = view.getMonth();
day_x = view.getDayOfMonth();
calendar.set(year_x, month_x, day_x);
ScheduleCalendar scheduleCal = new ScheduleCalendar(calendar, 0);
TextView switcherDateDay = (TextView) getActivity().findViewById(R.id.schedule_switcher_date);
TextView switcherCurrentDay = (TextView) getActivity().findViewById(R.id.schedule_switcher_current_day);
switcherDateDay.setText(String.format("%s %s %s", scheduleCal.getDayName(), scheduleCal.getDayNo(), scheduleCal.getMonthName()));
switcherCurrentDay.setText(ScheduleSwitcherFragment.statueOfWeek(scheduleCal));
}
}
在日期选择器对话框的 onDateSet 方法中显示您的 Toast
如果你想这样做,我相信你需要实现 DialogInterface.OnClickListener()(而不是 DatePickerDialog.OnClickListener())。尽管我不确定您为什么不按照 OnCreateDialog 方法中注释掉的代码中的方式进行操作。
此外,您仍然需要将 OnClickListener 添加到您希望捕获点击的按钮。