Я полагаю, что вам нужно переделать код выбора даты так, чтобы при создании можно было установить setMinDate()
, чтобы вы могли передать минимальную дату.Прямо сейчас вы устанавливаете минимальную дату прямо здесь:
dialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
Это прекрасно работает для первого средства выбора даты, поскольку минимальная дата, представленная сегодня, но для второго средства выбора даты, которое вы хотите передать в первоедата как минимальная дата.
Я не знаю, как выглядит ваш другой код с точки зрения создания фрагмента выбора даты, но, предполагая, что вы используете фрагменты, вы можете указать минимальную дату в комплекте аргументов при создании фрагмента.Вот пример того, как вы должны передать минимальную дату при создании фрагмента:
// This would be the start date the user had previously chosen
long startDate = 0L
Bundle bundle = new Bundle();
// We only want to put in the min date if this is the second date
if (!startDateOrEndDate) {
bundle.putLong("minDate", startDate);
}
// Create the Fragment, set the bundle as its arguments
DatePickerFragment fragment = new DatePickerFragment();
fragment.setArguments(bundle);
Затем в DatePickerFragment
вы соответственно установите минимальную дату:
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
// Dialog Creation code here
// Default the min date to today
long minDate = System.currentTimeMillis() - 1000;
// Check if there are arguments
Bundle args = getArguments();
if (args != null) {
// If there are args, grab the min date from it (default to today just in case)
minDate = args.getLong("minDate", minDate);
}
dialog.getDatePicker().setMinDate(minDate);
return dialog;
}
Есть несколько вещей, которые следует учитывать:
- Вы должны убедиться, что пользователь выбирает дату начала до даты окончания.
- Возможно, вы захотите установить конечную дату как
(startDate + 1 day)
, а не просто startDate
, поэтому вам нужно будет учесть это при прохождении minDate
.
В целом это должно дать вам представление о том, как действовать.
Примечание: я бы порекомендовал переименовать ваше булево значение на что-то более понятное, например isStartDate
.Таким образом, если это правда, вы знаете, что это дата начала и наоборот.startDateOrEndDate
не говорит нам, какой это, если это правда, он просто говорит нам, что это либо дата начала, либо дата окончания.
Редактировать - 11 марта 2019
Учитывая ваш новый код, вы можете изменить его с помощью того, что я сказал выше
Details.java
private long startDate = -1L;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_details);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment datePicker = new DatePickerFragment();
datePicker.show(getSupportFragmentManager(),"Date Picker");
startDateOrEndDate = true ;
}
});
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (startDate == -1L) {
// Start date hasn't been chosen yet, tell user to do so
Toast.makeText(Details.this, "Please choose start date", Toast.LENGTH_SHORT).show();
return;
}
// Add the start date to the bundle
Bundle bundle = new Bundle();
bundle.putLong("minDate", startDate);
// Create the Fragment, set the bundle as its arguments
DatePickerFragment datePicker = new DatePickerFragment();
datePicker.setArguments(bundle);
datePicker.show(getSupportFragmentManager(),"Date Picker");
startDateOrEndDate = false ;
}
});
}
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year );
c.set(Calendar.MONTH, month);
c.set(Calendar.DAY_OF_MONTH, dayOfMonth);
String date = DateFormat.getDateInstance(DateFormat.FULL).format(c.getTime());
TextView textView = (TextView) findViewById(R.id.checkInTV);
TextView textView2 = (TextView) findViewById(R.id.checkOutTV);
if (startDateOrEndDate) {
// If this is the start date, save it to the instance variable above
startDate = c.getTimeinMillis();
textView.setText(date);
} else {
textView2.setText(date);
}
}
И вonCreateDialog()
из DatePickerFragment
используйте код в моем исходном ответе выше.
Дайте мне знать, если это имеет смысл!