所有文档&示例似乎与"如何在活动"中返回从datepicker对话框中选择的日期。几乎所有这些都将当前日期设置为datepicker对话框中的默认日期。但是,如何传递特定日期,以便在日期选择器打开时显示日期和时间。不是现在的日期?
我面临的问题是,当用户点击按钮并且首次打开datepicker diaglog时,它会显示当前时间。
用户更改值并完成点击。
再次单击该按钮时,将打开日期选择器对话框。但是,不是更改日期,该值仍然是默认日期!!
public class DatePickerFragment extends SherlockDialogFragment
implements android.app.DatePickerDialog.OnDateSetListener{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
//TODO Use current date is date null, else show currently displayed date
// 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 monthOfYear,
int dayOfMonth) {
((NewTransactionActivity) getActivity()).updateDate(year, monthOfYear, dayOfMonth);
}
}
以上代码是datepicker始终显示默认日期的原因。但是,如何将日期值传递给此片段?
这是来自活动的代码:
public void showDatePickerDialog(View v) {
Bundle currentDate = new Bundle();
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getSupportFragmentManager(), "datePicker");
}
答案 0 :(得分:5)
//Get the date on the button now
Date buttonDate = SimpleDateFormat.getDateInstance().parse(mDate.getText().toString());
//Create a bundle to pass the date
Bundle currentDate = new Bundle();
currentDate.putLong("setDate", buttonDate.getTime());
//Pass the bundle to the fragment
DialogFragment newFragment = new DatePickerFragment();
newFragment.setArguments(currentDate);
newFragment.show(getSupportFragmentManager(), "datePicker");
现在在片段中执行此操作:
//Read the passed bundle from the activity
Bundle setDate = this.getArguments();
Long currDate = setDate.getLong("setDate");
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
c.setTimeInMillis(currDate);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
答案 1 :(得分:4)
你需要两件事:
1)将输入参数(或参数传递给DataPickerFragment)..
Bundle args = new Bundle();
args.putInt("someInt", someInt);
args.putString("someString", someString);
// Put any other arguments
myFragment.setArguments(args);
2)设置对话日期(请注意月份从0开始到11月结束)
以下是使用对话框
完成的示例private void showEditDatePopup()
{
String dateString = mBirthDate.getText().toString();
java.util.Date inputDate = null;
Calendar newCalendar = Calendar.getInstance();
if (dateString.length() > 0)
{
try
{
inputDate = DateFormat.getDateInstance(DateFormat.MEDIUM).parse(dateString);
newCalendar = Calendar.getInstance();
newCalendar.setTime(inputDate);
} catch (Exception e)
{
newCalendar = Calendar.getInstance();
newCalendar.setTime(inputDate);
}
}
DatePickerDialog dateDialog = new DatePickerDialog(this, new OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
Calendar newDate = Calendar.getInstance();
newDate.set(year, monthOfYear, dayOfMonth);
mBirthDate.setText(DateFormat.getDateInstance(DateFormat.MEDIUM).format(newDate.getTime()));
}
},newCalendar.get(Calendar.YEAR)
,newCalendar.get(Calendar.MONTH)
,newCalendar.get(Calendar.DAY_OF_MONTH));
dateDialog.show();
}
答案 2 :(得分:0)
这对我来说很好
在主活动中:
Calendar yourDate = Calendar.getInstance();
public void showDatePickerDialog(View v) {
DialogFragment newFragment = new DatePickerFragment();
Bundle args = new Bundle();
args.putInt("year", yourDate.get(Calendar.YEAR));
args.putInt("month", yourDate.get(Calendar.MONTH));
args.putInt("day",yourDate.get(Calendar.DAY_OF_MONTH));
newFragment.setArguments(args);
newFragment.show(getSupportFragmentManager(), "datePicker");
}
在 DatePickerFragment 中:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
Bundle bundle = this.getArguments();
int year = bundle.getInt ("year");
int month = bundle.getInt("month");
int day = bundle.getInt("day");
listener = (OnFragmentInteractionListener) getActivity();
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}