我在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”属性设置为等于所选日期
index.php?page=youtube&user=someone
单击按钮时出现日期选择器。但是,日期未正确设置,并且在按下日期按钮时实际上正在设置日期,而不是从选取器中选择日期时。 此外,在打印日期时,无论我选择哪个日期,都会得到以下内容: I / System.out:TW Dec 31 10:47:38 GMT + 00:00 2 在这里阅读一些解决方案指导我定义onDateSet和getDateFromDatePicker方法,但它们似乎没有正常运行。 非常感谢任何帮助,谢谢!
答案 0 :(得分:1)
经过一番挖掘,我按照我在 Android编程:大书呆子牧场指南一书中读到的方法,明确指出了如何在两个片段之间传递数据。 以下是我遵循的步骤:
// set taskFragment as the target fragment of DatePickerFragment
datePicker.setTargetFragment(TaskFragment.this, 0);
datePicker.show(fm, "datePicker");
public void onDateSet(DatePicker view, int year, int month, int day) {
// create date object using date set by user
Calendar calendar = Calendar.getInstance();
calendar.set(year, month, day);
Date date = calendar.getTime();
if (getTargetFragment() == null)
return;
Intent intent = new Intent();
intent.putExtra(DATE, date);
// pass intent to target fragment
getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, intent);
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != Activity.RESULT_OK){
return;
}
if (requestCode == REQUEST_DATE){
Date date = (Date) data.getSerializableExtra(DatePickerFragment.DATE);
task.setDate(date);
}
}
答案 1 :(得分:0)
使用DatePickerFragment时,通常会有一个用户选择日期时触发的界面。这称为DatePickerDialog.OnDateSetListener
。
在您的代码中,您正在显示选择器,然后立即设置日期,而不是等待用户选择。所以你需要做的是当触发onDateSet回调方法时,用日期做你想做的事。
如果您在活动中显示DatePickerFragment
,则执行此操作的一种方法是创建一个允许将片段中的消息发送到活动的界面。