Диалоговое окно элемента управления datepicker от нажатия полей EditText
у меня уже есть DatePicker, который появляется, когда пользователь нажимает на поле EditText
eReminderDate.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//To show current date in the datepicker
Calendar mcurrentDate = Calendar.getInstance();
int mYear = mcurrentDate.get(Calendar.YEAR);
int mMonth = mcurrentDate.get(Calendar.MONTH);
int mDay = mcurrentDate.get(Calendar.DAY_OF_MONTH);
DatePickerDialog mDatePicker;
mDatePicker = new DatePickerDialog(AddReminder.this, new OnDateSetListener() {
public void onDateSet(DatePicker datepicker, int selectedyear, int selectedmonth, int selectedday) {
// TODO Auto-generated method stub
/* Your code to get date and time */
selectedmonth = selectedmonth + 1;
eReminderDate.setText("" + selectedday + "/" + selectedmonth + "/" + selectedyear);
}
}, mYear, mMonth, mDay);
mDatePicker.setTitle("Select Date");
mDatePicker.show();
}
});
Я пробовал делать часы аналогичным образом, но не смог заставить его работать. Это моя попытка заставить его работать
eReminderTime.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Calendar mcurrentTime = Calendar.getInstance();
int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY);
int minute = mcurrentTime.get(Calendar.MINUTE);
TimePickerDialog mTimePicker;
mTimePicker = new TimePickerDialog(AddReminder.this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
eReminderTime.setText( ""selectedHour + ":" + selectedMinute);
}
}, hour, minute);
mTimePicker.setTitle("Select Time");
mTimePicker.show();
}
});
это невозможно сделать так же, как я сделал это для DatePicker?
Я пробовал даже просто сделать TimePicker всплывающим, как только поле EditText щелкнуто с этим кодом.
eReminderTime.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
showDialog(TIME_DIALOG_ID);
}
});
для некоторых причина, когда я ввел это в Android Studio, "showDialog" был забит.
может кто-нибудь дать мне советы о том, куда я иду неправильно? Или мне просто придется использовать пользовательский DialogFragment?
8 ответов:
eReminderTime.setText( "" + selectedHour + ":" + selectedMinute);без
+между""и выбранный час,setTextметоды принимают только одну строку, поэтому вам нужно объединить все части (первые кавычки, вероятно, не нужны).eReminderTime.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Calendar mcurrentTime = Calendar.getInstance(); int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY); int minute = mcurrentTime.get(Calendar.MINUTE); TimePickerDialog mTimePicker; mTimePicker = new TimePickerDialog(AddReminder.this, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) { eReminderTime.setText( selectedHour + ":" + selectedMinute); } }, hour, minute, true);//Yes 24 hour time mTimePicker.setTitle("Select Time"); mTimePicker.show(); } });Это должно исправить вашу вторую ошибку, вы не предоставляли последний параметр. Конструкторы TimePickerDialog
почему бы не написать многоразовым способом ?
создать класс SetTime:
class SetTime implements OnFocusChangeListener, OnTimeSetListener { private EditText editText; private Calendar myCalendar; public SetTime(EditText editText, Context ctx){ this.editText = editText; this.editText.setOnFocusChangeListener(this); this.myCalendar = Calendar.getInstance(); } @Override public void onFocusChange(View v, boolean hasFocus) { // TODO Auto-generated method stub if(hasFocus){ int hour = myCalendar.get(Calendar.HOUR_OF_DAY); int minute = myCalendar.get(Calendar.MINUTE); new TimePickerDialog(ctx, this, hour, minute, true).show(); } } @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { // TODO Auto-generated method stub this.editText.setText( hourOfDay + ":" + minute); } }затем вызовите его из функции onCreate:
EditText editTextFromTime = (EditText) findViewById(R.id.editTextFromTime); SetTime fromTime = new SetTime(editTextFromTime, this);
вы можете использовать приведенный ниже код в прослушивателе onclick edittext
TimePickerDialog timePickerDialog = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { tv_time.setText(hourOfDay + ":" + minute); } }, hour, minute, false); timePickerDialog.show();вы можете увидеть полный код пример Android timepicker
Я не знаю, если это будет работать для вас, это работает для меня просто отлично.
создайте метод для диалогового окна выбора даты/времени.
private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() { // when dialog box is called, below method will be called. // The arguments will be working to get the Day of Week to show it in a special TextView for it. public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) { String year1 = String.valueOf(selectedYear); String month1 = String.valueOf(selectedMonth + 1); String day1 = String.valueOf(selectedDay); delivDate.setText(month1 + "/" + day1 + "/" + year1); delivDay.setText(DateFormat.format("EEEE", new Date(selectedYear, selectedMonth, selectedDay - 1)).toString()); } };и тогда, где вы хотите, вы можете сделать это просто так
public void setDateOnClick (View view) { Calendar cal = Calendar.getInstance(); DatePickerDialog datePicker = new DatePickerDialog(this, datePickerListener, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH)); //Create a cancel button and set the title of the dialog. datePicker.setCancelable(false); datePicker.setTitle("Select the date"); datePicker.show(); }надеюсь, вы найдете это в качестве вашего решения.
public void onClick1(View v) { DatePickerDialog dialog = new DatePickerDialog(this, this, 2013, 2, 18); dialog.show(); } public void onDateSet1(DatePicker view, int year1, int month1, int day1) { e1.setText(day1 + "/" + (month1+1) + "/" + year1); }
вы не поставили последний аргумент в
TimePickerDialog.{ public TimePickerDialog(Context context, OnTimeSetListener listener, int hourOfDay, int minute, boolean is24HourView) { this(context, 0, listener, hourOfDay, minute, is24HourView); } }этот код
TimePickerclass. для этого требуется логический аргументis24HourView
public class **Your java Class** extends ActionBarActivity implements View.OnClickListener{ date = (EditText) findViewById(R.id.date); date.setInputType(InputType.TYPE_NULL); date.requestFocus(); date.setOnClickListener(this); dateFormatter = new SimpleDateFormat("yyyy-MM-dd", Locale.US); setDateTimeField(); private void setDateTimeField() { Calendar newCalendar = Calendar.getInstance(); fromDatePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() { public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { Calendar newDate = Calendar.getInstance(); newDate.set(year, monthOfYear, dayOfMonth); date.setText(dateFormatter.format(newDate.getTime())); } }, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH)); } @Override public void onClick(View v) { fromDatePickerDialog.show(); } }
я расширил хорошее многоразовое решение @Sumoanand для поддержки как изменения фокуса, так и прослушивателей щелчка при изменении времени несколько раз. Также обновление календаря подборщика для запоминания последнего выбранного времени + форматирование чч: мм
public class TimeSetter implements View.OnFocusChangeListener, TimePickerDialog.OnTimeSetListener, View.OnClickListener { private EditText mEditText; private Calendar mCalendar; private SimpleDateFormat mFormat; public TimeSetter(EditText editText){ this.mEditText = editText; mEditText.setOnFocusChangeListener(this); mEditText.setOnClickListener(this); } @Override public void onFocusChange(View view, boolean hasFocus) { if (hasFocus){ showPicker(view); } } @Override public void onClick(View view) { showPicker(view); } private void showPicker(View view) { if (mCalendar == null) mCalendar = Calendar.getInstance(); int hour = mCalendar.get(Calendar.HOUR_OF_DAY); int minute = mCalendar.get(Calendar.MINUTE); new TimePickerDialog(view.getContext(), this, hour, minute, true).show(); } @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { mCalendar.set(Calendar.HOUR_OF_DAY, hourOfDay); mCalendar.set(Calendar.MINUTE, minute); if (mFormat == null) mFormat = new SimpleDateFormat("HH:mm", Locale.getDefault()); this.mEditText.setText(mFormat.format(mCalendar.getTime())); } }использование от onCreate:
EditText timeEditText = (EditText) rootView.findViewById(R.id.timeText); new TimeSetter(timeEditText);
Comments