У меня есть DatePickerDialog, который открывается во фрагменте. При первом открытии в диалоговом окне по умолчанию отображается текущая дата. Затем пользователь выбирает дату. Когда диалог отклоняется, я устанавливаю строку EditText с выбранной пользователем датой.Как получить интерфейс Bundle для доставки предыдущей даты DatePickerDialog?
В следующий раз, когда открывается диалоговое окно (потому что пользователь хочет отредактировать ранее выбранную дату), я хочу показать ранее выбранную дату пользователя как дату по умолчанию, а не сегодняшнюю дату. Я установил интерфейс из фрагмента в действие с помощью Bundle. Кроме того, не уверен, что мой тест пустоты на «год» в Fragment OnCreateDialog работает правильно. Пожалуйста, порекомендуйте.
частичный файл DatePickerFragment:
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
private int currentyear;
private int currentmonth;
private int currentday;
public DatePickerFragment() {
}
public interface OnDateEnteredListener {
void OnDateEntered(int year, int month, int day);
}
OnDateEnteredListener mListener;
// Set up a Calendar object that will capture the current date for the DatePickerDialog to use.
Calendar cal = Calendar.getInstance();
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Bundle datebundle = this.getArguments();
currentyear = datebundle.get(Calendar.YEAR);
currentmonth = datebundle.get(Calendar.MONTH);
currentday = datebundle.get(Calendar.DAY_OF_MONTH);
if(currentyear != 0){
DatePickerDialog dateDialog = new DatePickerDialog(this.getActivity(), this, currentyear, currentmonth, currentday);
dateDialog.getDatePicker().setCalendarViewShown(true);
dateDialog.getDatePicker().setSpinnersShown(false);
dateDialog.setTitle("Select a Due Date");
return dateDialog;
}
else {
// Create three variables to capture the current date.
currentyear = cal.get(Calendar.YEAR);
currentmonth = cal.get(Calendar.MONTH);
currentday = cal.get(Calendar.DAY_OF_MONTH);
// Create a DatePickerDialog which is a simple dialog containing a DatePicker. Use the current date
// as the default date in the DatePicker. The new instance of DatePickerDialog is created by passing
// 5 parameters/arguments to the constructor and returning it.
DatePickerDialog dateDialog = new DatePickerDialog(this.getActivity(), this, currentyear, currentmonth, currentday);
dateDialog.getDatePicker().setCalendarViewShown(true);
dateDialog.getDatePicker().setSpinnersShown(false);
dateDialog.setTitle("Select a Due Date");
return dateDialog;
}
}
public void onDateSet (DatePicker view,int year, int month, int day) {
mListener.OnDateEntered(year,month,day);
...
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}
частичный файл активность:
public class Activity extends AppCompatActivity implements DatePickerFragment.OnDateEnteredListener {
int currentyear;
int currentmonth;
int currentday;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.input);
fListenerEditText = (ListenerEditText) findViewById(R.id.FEditText);
fListenerEditText.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus && (fListenerEditText.getText().length() == 0)) {
DialogFragment newFragment = new DatePickerFragment();
Bundle datebundle = new Bundle();
datebundle.putInt("YEAR", currentyear);
datebundle.putInt("MONTH", currentmonth);
datebundle.putInt("DAY", currentday);
newFragment.setArguments(datebundle);
newFragment.show(getSupportFragmentManager(), "datePicker");
}
}
});
@Override
public void onDateEntered(int year, int month, int day) {
Toast toast = Toast.makeText(getApplicationContext(), "Test", Toast.LENGTH_LONG);
toast.show();
}
}
Перед тем, как вызвать диалог, вы должны получить дату из 'EditText', разобрать текст на сегодняшний день и установить его на текущую дату, то в вашем диалоге' OnCreate() 'просто получить текущую дату –
Хорошо, но как бы я это сделал? При первом создании диалога EditText пуст, и я хочу показать сегодняшнюю дату. Затем пользователь выбирает дату. В следующий раз, когда пользователь захочет отредактировать ранее выбранную дату, я смогу использовать EditText. Но как бы я сделал в onCreate()? – AJW
В первый раз, когда вы запускаете, вы просто вызываете диалог и диалоговое окно с сегодняшней датой, которое вы уже объявили внутри своего оператора else. Это все для диалога. Затем пользователь выбирает дату, вы устанавливаете 'EditText' на выбранную дату. Что означает, что ваш фрагмент диалога не должен проверять предыдущую дату, просто покажите дату get из cal.get (Calendar.YEAR), месяц и день. Поскольку вы можете установить текущую дату, используя cal.set(), прежде чем открыть диалог –