Последняя выбранная дата не попадает в диалоговом окне datepicker

В моем приложении у меня есть один datepicker, я могу выбрать и установить выбранную дату в textview, но проблема в том, что если я снова нажму на textview, чтобы открыть datepicker dailog, он всегда показывает текущую дату вместо последней выбранной даты.. так в чем проблема?

  public class MainActivity extends Activity {

private TextView date_dropdown;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    date_dropdown=(TextView)findViewById(R.id.shows_dt);


    Calendar calendar = Calendar.getInstance();

    date_dropdown.setText(calendar.get(Calendar.DAY_OF_MONTH) + "-"
            + (calendar.get(Calendar.MONTH) + 1) + "-"
            + calendar.get(Calendar.YEAR));

    date_dropdown.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            showDatePickerDialog();
        }
    });
}

public void showDatePickerDialog() {

    System.out.println("show date picke dilg ");
    System.out.println("show date picke dilg");

    DialogFragment newFragment1 = new SelectDateFragment();
    newFragment1.show(getFragmentManager(), "DatePicker");
}

public class SelectDateFragment extends DialogFragment implements
        DatePickerDialog.OnDateSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        final Calendar calendar = Calendar.getInstance();
        int yy = calendar.get(Calendar.YEAR);
        int mm = calendar.get(Calendar.MONTH);
        int dd = calendar.get(Calendar.DAY_OF_MONTH);
        return new DatePickerDialog(getActivity(), this, yy, mm, dd);
    }

    public void onDateSet(DatePicker view, int yy, int mm, int dd) {
        populateSetDate(yy, mm + 1, dd);
    }

    public void populateSetDate(int year, int month, int day) {
        date_dropdown.setText(day + "-" + month + "-" + year);
    }

}

Ответ 1

Ниже строки, которую вы дали, получите только текущую дату, поэтому вы получите только текущую дату.

 date_dropdown.setText(calendar.get(Calendar.DAY_OF_MONTH) + "-"
        + (calendar.get(Calendar.MONTH) + 1) + "-"
        + calendar.get(Calendar.YEAR));

сохраните выбранную дату в разделе "Общие предпочтения", затем "Показать" в текстовом редакторе

Ответ 2

Вы должны определить экземпляр календаря в методе onCreate(), а затем обновить значение месяца месяца и даты onDateSet(), поэтому, когда вы снова откроете диалоговое окно выбора даты, это будет выглядеть ранее выбранная дата.

Сделайте это как

  public class MainActivity extends Activity {

private TextView date_dropdown;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


       final Calendar calendar = Calendar.getInstance();
        int yy1 = calendar.get(Calendar.YEAR);
        int mm1 = calendar.get(Calendar.MONTH);
        int dd1 = calendar.get(Calendar.DAY_OF_MONTH);

    date_dropdown=(TextView)findViewById(R.id.shows_dt);


    Calendar calendar = Calendar.getInstance();

    date_dropdown.setText(calendar.get(Calendar.DAY_OF_MONTH) + "-"
            + (calendar.get(Calendar.MONTH) + 1) + "-"
            + calendar.get(Calendar.YEAR));

    date_dropdown.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            showDatePickerDialog();
        }
    });
}

public void showDatePickerDialog() {

    System.out.println("show date picke dilg ");
    System.out.println("show date picke dilg");

    DialogFragment newFragment1 = new SelectDateFragment();
    newFragment1.show(getFragmentManager(), "DatePicker");
}

public class SelectDateFragment extends DialogFragment implements
        DatePickerDialog.OnDateSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        return new DatePickerDialog(getActivity(), this, yy1, mm1, dd1);
    }

    public void onDateSet(DatePicker view, int yy, int mm, int dd) {
        populateSetDate(yy, mm + 1, dd);

         yy1 = yy ;
         mm1 = mm;
         dd1 = dd ;
    }

    public void populateSetDate(int year, int month, int day) {
        date_dropdown.setText(day + "-" + month + "-" + year);
    }

}

Ответ 3

Похоже, вы создаете новый диалог каждый раз, когда вы нажимаете, что означает, что onCreateDialog снова устанавливает дату на текущее время. Вы хотите иметь переменную класса DialogFragment df, а в вашем showDatePickerDialog сделать что-то вроде этого:

public void showDatePickerDialog() {
    if (df == null){
        // Only create a new fragment if one does not exist
        DialogFragment df = new SelectDateFragment();
    }
    df.show(getFragmentManager(), "DatePicker");
}

Вы также захотите сохранить значение, которое пользователь выбирает в вашем методе onPause, и установите DialogFragment на это значение в onResume, если ваш пользователь будет перемещаться от вашего приложения при вводе информации.

Ответ 4

Как отключить будущий выбор даты в android

 mDatePicker.getDatePicker().setMaxDate(System.currentTimeMillis());


ed_date.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                Calendar mcurrentDate=Calendar.getInstance();
                year=mcurrentDate.get(Calendar.YEAR);
                month=mcurrentDate.get(Calendar.MONTH);
                day=mcurrentDate.get(Calendar.DAY_OF_MONTH);

                final DatePickerDialog   mDatePicker =new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener()
                {
                    @Override
                    public void onDateSet(DatePicker datepicker, int selectedyear, int selectedmonth, int selectedday)
                    {
                              ed_date.setText(new StringBuilder().append(year).append("-").append(month+1).append("-").append(day));
                            int month_k=selectedmonth+1;

                    }
                },year, month, day);
                mDatePicker.setTitle("Please select date");
                // TODO Hide Future Date Here
                mDatePicker.getDatePicker().setMaxDate(System.currentTimeMillis());

                // TODO Hide Past Date Here
                //  mDatePicker.getDatePicker().setMinDate(System.currentTimeMillis());
                mDatePicker.show();
            }
        }); 

Ответ 5

 mDatePicker.getDatePicker().setMaxDate(System.currentTimeMillis());


ed_date.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                Calendar mcurrentDate=Calendar.getInstance();
                year=mcurrentDate.get(Calendar.YEAR);
                month=mcurrentDate.get(Calendar.MONTH);
                day=mcurrentDate.get(Calendar.DAY_OF_MONTH);

                final DatePickerDialog   mDatePicker =new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener()
                {
                    @Override
                    public void onDateSet(DatePicker datepicker, int selectedyear, int selectedmonth, int selectedday)
                    {
                              ed_date.setText(new StringBuilder().append(year).append("-").append(month+1).append("-").append(day));
                            int month_k=selectedmonth+1;

                    }
                },year, month, day);
                mDatePicker.setTitle("Please select date");
                // TODO Hide Future Date Here
                mDatePicker.getDatePicker().setMaxDate(System.currentTimeMillis());

                // TODO Hide Past Date Here
                //  mDatePicker.getDatePicker().setMinDate(System.currentTimeMillis());
                mDatePicker.show();
            }
        }); 

Ответ 6

updateDate через установку предыдущей выбранной даты в подборщике даты

mDatePicker.updateDate(1994, 6, 12);


mDatePicker.setTitle("Please select date");
mDatePicker.updateDate(1994, 6, 12);
mDatePicker.getDatePicker().setMaxDate(System.currentTimeMillis());