我在我的android应用程序中定义了DatePickerFragment,这里是代码:
public class DatePickerFragment extends DialogFragment implements
DatePickerDialog.OnDateSetListener {
private int year;
private int month;
private int day;
@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
return new DatePickerDialog(getActivity(), this, year, month, day);
}
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public Date getDateFromDatePicker(){
Calendar calendar = Calendar.getInstance();
calendar.set(year, month, day);
return calendar.getTime();
}
}
我想从TaskFragment中从这个日期选择器中检索日期,并将我的类Task中的“date”属性设置为等于所选日期
// Method for date picker to appear once the "Due Date" button is clicked.
datePickerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fm = getActivity().getFragmentManager();
DatePickerFragment datePicker = new DatePickerFragment();
datePicker.show(fm, "datePicker");
task.setDate(datePicker.getDateFromDatePicker());
//test
System.out.println(task.getDate());
}
});
单击按钮时会出现日期选择器 . 但是,日期没有正确设置,并且在按下日期按钮时实际上正在设置日期,而不是从选择器中选择日期时 . 此外,在打印日期时,无论我选择哪个日期,我都会得到以下信息:I / System.out:Wed Dec 31 10:47:38 GMT 00:00 2在这里阅读一些解决方案,指导我定义onDateSet和getDateFromDatePicker方法,但它们似乎没有正常运作 . 非常感谢任何帮助,谢谢!
2 回答
使用DatePickerFragment时,通常会有一个在用户选择日期时触发的界面 . 这称为
DatePickerDialog.OnDateSetListener
.在您的代码中,您将显示选择器,然后立即设置日期,而不是等待用户选择 . 所以你需要做的是当触发onDateSet回调方法时,用日期做你想做的事 .
如果您在Activity中显示
DatePickerFragment
,则执行此操作的一种方法是创建一个允许将Fragment中的消息发送到活动的接口 .经过一番挖掘,我按照我在Android编程:大书呆子牧场指南一书中读到的方法,明确指出了如何在两个片段之间传递数据 . 以下是我遵循的步骤: