3

All documentation & example seems to be related to "How to get the date selected from the datepicker dialog back in the activity". And almost all of them sets the current date as default date in the datepicker dialog. However how do I pass a specific date so that when the datepicker opens, it shows that date & not current date?

The problem I'm facing is, when the user clicks a button and the datepicker diaglog opens for the first time, it shows the current time.

The user changes the value and clicks done.

When the button is clicked again, the datepicker dialog is opened. However instead of the changed date, the value is still the default date!!

Code:

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);
        
    }

}

The above code is the reason for the datepicker always showing up with default date. However how do I pass the date value to this fragment?

This is code from the activity:

public void showDatePickerDialog(View v) {
    Bundle currentDate = new Bundle();
    DialogFragment newFragment = new DatePickerFragment();
    newFragment.show(getSupportFragmentManager(), "datePicker");
}
4

3 回答 3

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);
于 2013-05-17T08:16:24.103 回答
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();
}
于 2013-05-16T22:45:04.683 回答
0

这对我来说很好

在 MainActivity 中:

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);
    }
于 2021-01-11T18:01:06.047 回答