繁体   English   中英

如何在下次调用时在DatePickerDialog中显示以前选择的日期?

[英]How do I show the previously selected date in a DatePickerDialog on next call?

DatePickerDialog加载在Fragment中,今天显示为首次打开对话框时的默认日期。 然后,用户选择日期,然后关闭对话框。 在下次重新打开时,如何将之前选择的日期显示为默认日期而不是显示今天的日期?

我在Activity中尝试过.set()但不知道如何使用.get()来检索片段中的日期。 我已经在Activity和fragement之间尝试了一个带有监听器的接口,但是无法让它工作,对于我想要实现的简单任务来说,它似乎过于复杂。 我已经尝试了从活动发送到片段的捆绑包但我无法让它工作。 请指教。

活动文件:

...
final Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month);
c.set(Calendar.DAY_OF_MONTH, day);
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getSupportFragmentManager(), "datePicker");

片段文件:

...
public static class DatePickerFragment extends DialogFragment
                        implements DatePickerDialog.OnDateSetListener {

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

    return new DatePickerDialog(getActivity(), this, year, month, day);
}

public void onDateSet(DatePicker view, int year, int month, int day) {
    // Save selected date in a date variable here?  How?
    // How do I then use the date variable in onCreateDialog
    // rather than the get(Calendar) code that returns today's date? 
}

}

获取具有默认日期日期的DatePicker:

@SuppressLint("SimpleDateFormat")
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
private Calendar calendar = null;

int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
OnDateSetListener dateSetListener = new OnDateSetListener() {

@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
calendar.set(year, monthOfYear, dayOfMonth);
//this line save-s the DatePicker selected date to the edittext
//you can try with:  Date dpDate =new Date(sdf.format(calendar.getTime();
birthDate.setText(sdf.format(calendar.getTime()));
}
};

final DatePickerFragment datePickerFragment = new DatePickerFragment(StepSettingsView.this, dateSetListener, year, month, day);
datePickerFragment.getDatePicker().setMaxDate(new Date().getTime());
datePickerFragment.show();
                    datePickerFragment.getButton(DatePickerDialog.BUTTON_NEUTRAL).setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
birthDate.setText("");
datePickerFragment.dismiss();
}
});

在Bundle中,您应该发送年月和日值并在此处进行检索,如:

@Override
public Dialog onCreateDialog(Bundle mBundle) {

    int year = mBundle.getInt("YEAR");
    int month =  mBundle.getInt("MONTH");
    int day =  mBundle.getInt("DAY");

    return new DatePickerDialog(getActivity(), this, year, month, day);
}

public void onDateSet(DatePicker view, int year, int month, int day) {
    // Save selected date in a date variable here?  How?
    // How do I then use the date variable in onCreateDialog
    // rather than the get(Calendar) code that returns today's date? 
}

从那里我们从那里调用这个日期时间选择器片段,你需要发送这个包。

全球宣布

private DatePicker datepicker;

复制并粘贴以下功能

   private void selectDate() {

    final DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(),
            new DatePickerDialog.OnDateSetListener() {

                @Override
                public void onDateSet(DatePicker view, int year,
                                      int monthOfYear, int dayOfMonth) {

                    datepicker = new DatePicker(getActivity());

                    datepicker.init(year, monthOfYear + 1, dayOfMonth, null);


                }
            }, mYear, mMonth, mDay);

    if (datepicker != null) {
        datePickerDialog.updateDate(datepicker.getYear(), datepicker.getMonth() - 1, datepicker.getDayOfMonth());

    }
    datePickerDialog.show();
}

如果我关注你的问题,而不是把日期放在sharedPreferences

public void onDateSet(DatePicker view, int year, int month, int day) {
// here put you date to shared preference in get later//
// you can convert it to time stamp and easily save
}

通过使用sharedPreferences您可以设置任何位置并获取应用程序中的任何位置。

请得到这个

private String lastStoredDate;


    if(lastStoredDate == null || lastStoredDate.trim().length() == 0){
        lastStoredDate = getCurrentDate("MM/dd/yyyy");
    }
    String dobSplit[] = lastStoredDate.split("/");
    Calendar calendar = Calendar.getInstance();
    calendar.set(Integer.parseInt(dobSplit[2]), Integer.parseInt(dobSplit[0]), Integer.parseInt(dobSplit[1]));
    int iDay=calendar.get(Calendar.DATE);
    int iMonth=calendar.get(Calendar.MONTH)-1;
    int iYear=calendar.get(Calendar.YEAR);
    DatePickerDialog dbDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            StringBuilder date = new StringBuilder();

            monthOfYear = monthOfYear + 1;
            if (monthOfYear < 10) {
                date.append("0"+monthOfYear+"/"+dayOfMonth);
            }else{
                date.append(monthOfYear).append("/"+dayOfMonth);
            }
            date.append("/"+year);
          lastStoredDate = date.toString();
        }
    },iYear,iMonth,iDay);
    dbDialog.getDatePicker().setDescendantFocusability(DatePicker.FOCUS_BLOCK_DESCENDANTS);

    dbDialog.show();

//获得好日期

    public static String getCurrentDate(String format) {
    SimpleDateFormat sdf = new SimpleDateFormat(format);
    String formattedDate = sdf.format(Calendar.getInstance().getTime());
    return formattedDate;
    }
First of all this code is working on `edittext` or any button to set previous and current date in to Date picker.                

public class AboutMeActivity extends AppCompatActivity {

DatePickerDialog datePickerDialog;
private TextInputEditText   edtDateOfBirth;
private int mYear;
private int mMonth;
private int mDay;

private  View.OnClickListener edtDateOfBirthClickListener    =   new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        datePickerDialog = new DatePickerDialog(AboutMeActivity.this, new DatePickerDialog.OnDateSetListener() { 

       @Override
       public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {

          //here i=year,i1= month,i2=days.

            mYear =i;
            mMonth=i1;
            mDay=i2;

            edtDateOfBirth.setText(i2 + "-" + (i1 + 1) + "-" + i);
       }

    }, mYear, mMonth, mDay);

   datePickerDialog.show();
 }};                     

  @Override
  protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);            
       edtDateOfBirth = (TextInputEditText)findViewById(R.id.edtDateOfBirth);     if(edtDateOfBirth!=null)edtDateOfBirth.setOnClickListener(edtDateOfBirthClickListener);  

  Calendar c = Calendar.getInstance();
  mYear = c.get(Calendar.YEAR); // current year
  mMonth = c.get(Calendar.MONTH); // current month
  mDay = c.get(Calendar.DAY_OF_MONTH); //current Day.       

}

}

“我的编辑”文本字段显示当前日期,并通过从编辑文本字段中提取值并更新“日期选择器”对话框,在下次打开Datepicker Dailog时更新上次选择的日期。

我对编辑文本字段中设置的on click函数有一个非常详细的解释。

我已经发布了整个功能,您可以从评论中看到哪些部分可用于您的问题

注意:我没有捕获空值,因为我在编辑文本视图中默认显示当前日期。

  public void setDateDialog(View view) {
    // Edit text field which on click opens the Datepicker Dialog
    final EditText eText = findViewById(R.id.timeField);
    // Get the current value in the edit text field
    String userInput = eText.getText().toString();
    // Remove the date seprators
    String[] dateParts = userInput.split("/");
    // Day String
    String dayStr = dateParts[0];
    // Month String
    String monthStr = dateParts[1];
    // Year String
    String yearStr = dateParts[2];
    // Day String to integer
    final int dayInt = Integer.parseInt(dayStr);
    // Month String to integer ( Substarct 1 as month as count starts from 0)
    final int monthInt = Integer.parseInt(monthStr)-1;
    // Year String to integer
    final int yearInt  = Integer.parseInt(yearStr);
    // Initialise the calender
    final Calendar cldr = Calendar.getInstance();
    int day = cldr.get(Calendar.DATE);
    int month = cldr.get(Calendar.MONTH);
    int year = cldr.get(Calendar.YEAR);

    DatePickerDialog pickerDialog = new DatePickerDialog(QuickLaunch.this, R.style.DatePickerTheme, new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
           // Adding Zero before month if month is single digit
            int month = monthOfYear + 1;
            String fm = "" + month;
            String fd = "" + dayOfMonth;
            if (month < 10) {
                fm = "0" + month;
            }
            if (dayOfMonth < 10) {
                fd = "0" + dayOfMonth;
            }
            eText.setText(fd + "/" + (fm) + "/" + year);
        }
    }, year, month, day);
    // Set the maximum date till tommorrow
    pickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis() + (1000 * 60 * 60 * 24 * 1));
    // Set the minimun date till yesterday
    pickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() - (1000 * 60 * 60 * 24 * 1));
    //Set the previous date in datepicker
    pickerDialog.getDatePicker().init(yearInt,monthInt,dayInt,null);
    pickerDialog.show();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM