Android Datepicker - 如何将日期从活动传递到片段

时间:2013-05-16 22:35:38

标签: android android-activity datepicker

所有文档&示例似乎与"如何在活动"中返回从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");
}

3 个答案:

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