Урок 59. Диалоги. DatePickerDialog
Урок 59. Диалоги. DatePickerDialog
В этом уроке:
- используем DatePickerDialog
[url=http://www.startandroid.ru/ru/uroki/vse ... l:36jj1qyn]Click here to read this article![/url:36jj1qyn]
- используем DatePickerDialog
[url=http://www.startandroid.ru/ru/uroki/vse ... l:36jj1qyn]Click here to read this article![/url:36jj1qyn]
Последний раз редактировалось damager82 08 май 2017, 16:03, всего редактировалось 4 раза.
Re: Урок 59. Диалоги. DatePickerDialog
У меня нет андроида, я запускаю все по уроку на эмуляторе. Так вот сам диалог выбора даты просто ужасен! у меня нет таких кнопочек с + и -, а просто бегунок со стрелочками вверх и вниз. не представляю, чтоб его можно было использовать. На экране, допустим, вертикакльно три числа - 01 02 03. 02- значит текущее, я хочу допустим поставить первое число. Если я щелкаю по 01 то дата становится наоборот - 03! т.е. этот бегунок крутится в другую сторону.. просто катастрофа. Да еще и все на английском..
интересно, на реальных устройствах тоже так же? ох, надо свой писать
интересно, на реальных устройствах тоже так же? ох, надо свой писать
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 59. Диалоги. DatePickerDialog
Olivka
Приобретите бюджетное устройство и тестируйте все на нем, намного проще жизнь становится.
Приобретите бюджетное устройство и тестируйте все на нем, намного проще жизнь становится.
Re: Урок 59. Диалоги. DatePickerDialog
Пока не заработала
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 59. Диалоги. DatePickerDialog
Добрый. У меня при выводе даты номер месяца на единицу меньше (январь - 0 итд) Это так и должно быть? Я конечно прописал Month + 1, но хотелось бы знать.
И еще вопрос не по теме. Приложения для 2.3.3 будут работать на 4.1? (где то в форуме это мелькало, но найти я не могу)
Заранее спасибо.
И еще вопрос не по теме. Приложения для 2.3.3 будут работать на 4.1? (где то в форуме это мелькало, но найти я не могу)
Заранее спасибо.
Re: Урок 59. Диалоги. DatePickerDialog
это есть такой косяк, сам на него не давно попался, хоть и потратил пол часа но всё же не приятно =) но да, так и должно бытьДобрый. У меня при выводе даты номер месяца на единицу меньше (январь - 0 итд) Это так и должно быть? Я конечно прописал Month + 1, но хотелось бы знать.
это смотря что, 99.9% работает, но есть "фишечки" которые нет, здесь как говорится нужен и опыт и знание новшеств и архитектуры версий.И еще вопрос не по теме. Приложения для 2.3.3 будут работать на 4.1?
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 59. Диалоги. DatePickerDialog
Здравствуйте. Скажите, почему DateDialogPicker так сильно глючит на андроид 4.1?
При нажатии готово обработчик срабатывает 2 раза. Если ткнуть мимо диалога, он закроется, и при этом тоже срабатывает обработчик. Из-за чего это? Как это вылечить?
Повторное срабатывание временно вылечил с помощью подсчёта срабатываний и обнуления количества при создании диалога. Но что делать с отменой диалога?
При нажатии готово обработчик срабатывает 2 раза. Если ткнуть мимо диалога, он закроется, и при этом тоже срабатывает обработчик. Из-за чего это? Как это вылечить?
Повторное срабатывание временно вылечил с помощью подсчёта срабатываний и обнуления количества при создании диалога. Но что делать с отменой диалога?
Re: Урок 59. Диалоги. DatePickerDialog
С отменой не сложно, достаточно выставить флажок http://developer.android.com/reference/ ... e(boolean) и он перестанет реагировать на нажатия снаружи.
Так же нужно не забывать обрабатывать и кнопку Cancel, и закрытие диалога по кнопке "назад" (например, в диаложеках набора пароля).
Про двойное срабатывание не знаю, возможно просто в логике где-то ошибка.
Так же нужно не забывать обрабатывать и кнопку Cancel, и закрытие диалога по кнопке "назад" (например, в диаложеках набора пароля).
Про двойное срабатывание не знаю, возможно просто в логике где-то ошибка.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 59. Диалоги. DatePickerDialog
Или я чего-то не понимаю, или не работает.
Относительно урока сделал так:
В onCreateDialog
перед выводом диалога:
tpd.getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
Но ничего не изменилось. Окошко закрывается, обработчик срабатывает.
На счёт Cancel, назад тоже не понял. В этом диалоге же предусмотрена своя одна кнопка(в андроид 4) "Готово" и setPositiveButton, setNegativeButton тут не работают.
Про двойное срабатывание. проблема не в логике, а в самом диалоге. На 2.1 срабатывает 1 раз.
Относительно урока сделал так:
В onCreateDialog
перед выводом диалога:
tpd.getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
Но ничего не изменилось. Окошко закрывается, обработчик срабатывает.
На счёт Cancel, назад тоже не понял. В этом диалоге же предусмотрена своя одна кнопка(в андроид 4) "Готово" и setPositiveButton, setNegativeButton тут не работают.
Про двойное срабатывание. проблема не в логике, а в самом диалоге. На 2.1 срабатывает 1 раз.
Re: Урок 59. Диалоги. DatePickerDialog
Да, ты прав, наверное к DatePicker-у это не применимо..
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 59. Диалоги. DatePickerDialog
Здравствуйте!
Во-первых, спасибо за основательный подход. Собственно, вопрос:
Можно ли выводить текущую дату? (Кстати, неплохо было бы это и в самом уроке прописать)
Во-первых, спасибо за основательный подход. Собственно, вопрос:
Можно ли выводить текущую дату? (Кстати, неплохо было бы это и в самом уроке прописать)
Последний раз редактировалось ebtehun 14 авг 2013, 16:10, всего редактировалось 1 раз.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 59. Диалоги. DatePickerDialog
Создание диалогов
[syntax=java]
protected Dialog onCreateDialog(int id) {
if (id == DIALOG_DATE) {
DatePickerDialog tpd = new DatePickerDialog(this, myCallBackDate, year, monthOfYear, dayOfMonth);
return tpd;
}
if (id == DIALOG_TIME) {
TimePickerDialog tpd = new TimePickerDialog(this, myCallBackTime, hourOfDay, minute, true);
return tpd;
}
return super.onCreateDialog(id);
}
[/syntax]
Из вызов
[syntax=java]
showDialog(DIALOG_TIME);
showDialog(DIALOG_DATE);
[/syntax]
Глобальные переменные класса
[syntax=java5]
private int year = 2013;
private int monthOfYear = 01;
private int dayOfMonth = 01;
private int hourOfDay = 12;
private int minute = 00;
private int DIALOG_DATE = 1;
private int DIALOG_TIME = 2;
private Calendar cal;
private long selectedTime;
[/syntax]
Изменение глобальных переменных
[syntax=java5]
public void setCurrentData() {
long currentTime = System.currentTimeMillis();
Date date = new Date(currentTime);
cal = Calendar.getInstance();
cal.setTimeInMillis(totalTime);
this.year = cal.get(Calendar.YEAR);
this.monthOfYear = cal.get(Calendar.MONTH);
this.dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
this.hourOfDay = cal.get(Calendar.HOUR_OF_DAY);
this.minute = cal.get(Calendar.MINUTE);
}
[/syntax]
Ну и сами слушатели
[syntax=java5]
OnDateSetListener myCallBackDate = new OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
this.year = year;
this.monthOfYear = monthOfYear;
this.dayOfMonth = dayOfMonth;
cal = Calendar.getInstance();
cal.set(Calendar.MINUTE, this.minute);
cal.set(Calendar.HOUR_OF_DAY, this.hourOfDay);
cal.set(Calendar.DAY_OF_MONTH, this.dayOfMonth);
cal.set(Calendar.MONTH, this.monthOfYear);
cal.set(Calendar.YEAR, this.year);
selectedTime = cal.getTimeInMillis();
}
};
OnTimeSetListener myCallBackTime = new OnTimeSetListener() {
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
this.hourOfDay = hourOfDay;
this.minute = minute;
cal = Calendar.getInstance();
cal.set(Calendar.MINUTE, this.minute);
cal.set(Calendar.HOUR_OF_DAY, this.hourOfDay);
cal.set(Calendar.DAY_OF_MONTH, this.dayOfMonth);
cal.set(Calendar.MONTH, this.monthOfYear);
cal.set(Calendar.YEAR, this.year);
selectedTime = cal.getTimeInMillis();
}
};
[/syntax]
код вырезками, но думаю разберетесь тут.
[syntax=java]
protected Dialog onCreateDialog(int id) {
if (id == DIALOG_DATE) {
DatePickerDialog tpd = new DatePickerDialog(this, myCallBackDate, year, monthOfYear, dayOfMonth);
return tpd;
}
if (id == DIALOG_TIME) {
TimePickerDialog tpd = new TimePickerDialog(this, myCallBackTime, hourOfDay, minute, true);
return tpd;
}
return super.onCreateDialog(id);
}
[/syntax]
Из вызов
[syntax=java]
showDialog(DIALOG_TIME);
showDialog(DIALOG_DATE);
[/syntax]
Глобальные переменные класса
[syntax=java5]
private int year = 2013;
private int monthOfYear = 01;
private int dayOfMonth = 01;
private int hourOfDay = 12;
private int minute = 00;
private int DIALOG_DATE = 1;
private int DIALOG_TIME = 2;
private Calendar cal;
private long selectedTime;
[/syntax]
Изменение глобальных переменных
[syntax=java5]
public void setCurrentData() {
long currentTime = System.currentTimeMillis();
Date date = new Date(currentTime);
cal = Calendar.getInstance();
cal.setTimeInMillis(totalTime);
this.year = cal.get(Calendar.YEAR);
this.monthOfYear = cal.get(Calendar.MONTH);
this.dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
this.hourOfDay = cal.get(Calendar.HOUR_OF_DAY);
this.minute = cal.get(Calendar.MINUTE);
}
[/syntax]
Ну и сами слушатели
[syntax=java5]
OnDateSetListener myCallBackDate = new OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
this.year = year;
this.monthOfYear = monthOfYear;
this.dayOfMonth = dayOfMonth;
cal = Calendar.getInstance();
cal.set(Calendar.MINUTE, this.minute);
cal.set(Calendar.HOUR_OF_DAY, this.hourOfDay);
cal.set(Calendar.DAY_OF_MONTH, this.dayOfMonth);
cal.set(Calendar.MONTH, this.monthOfYear);
cal.set(Calendar.YEAR, this.year);
selectedTime = cal.getTimeInMillis();
}
};
OnTimeSetListener myCallBackTime = new OnTimeSetListener() {
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
this.hourOfDay = hourOfDay;
this.minute = minute;
cal = Calendar.getInstance();
cal.set(Calendar.MINUTE, this.minute);
cal.set(Calendar.HOUR_OF_DAY, this.hourOfDay);
cal.set(Calendar.DAY_OF_MONTH, this.dayOfMonth);
cal.set(Calendar.MONTH, this.monthOfYear);
cal.set(Calendar.YEAR, this.year);
selectedTime = cal.getTimeInMillis();
}
};
[/syntax]
код вырезками, но думаю разберетесь тут.
Re: Урок 59. Диалоги. DatePickerDialog
Я заметил, что текущую дату можно сразу объявить в переменных, это ведь не ошибка
Код: Выделить всё
private Calendar cal = Calendar.getInstance();
int myYear = cal.get(Calendar.YEAR);
int myMonth = cal.get(Calendar.MONTH);
int myDay = cal.get(Calendar.DAY_OF_MONTH);
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 59. Диалоги. DatePickerDialog
Код: Выделить всё
showDialog(DIALOG_DATE);
уже устарел, как обойтись без него?ShowDialog(int)' is deprecated less... (Ctrl+F1)
This inspection reports where deprecated code is used in the specified inspection scope.
Re: Урок 59. Диалоги. DatePickerDialog
DialogFragment или FragmentManager, но учитывая то, что выше упомянутые классы доступны только в апи 13+, то продолжай использовать и дальше ShowDialog, ну или саппорт либу.axtrace писал(а):Код: Выделить всё
showDialog(DIALOG_DATE);
уже устарел, как обойтись без него?ShowDialog(int)' is deprecated less... (Ctrl+F1)
This inspection reports where deprecated code is used in the specified inspection scope.
Re: Урок 59. Диалоги. DatePickerDialog
Почему так не работает?
Хотел текущую дату выставить по умолчанию
Код: Выделить всё
public void onclick(View view) {
Date Current_Date = Calendar.getInstance().getTime();
myYear = Current_Date.getYear();
myMonth = Current_Date.getMonth();
myDay = Current_Date.getDay();
showDialog(DIALOG_DATE);
}
Re: Урок 59. Диалоги. DatePickerDialog
[syntax=java]import java.util.Calendar;Isaev Хотел текущую дату выставить по умолчанию.
import android.app.Activity;
import android.app.DatePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView mDateDisplay;
private Button mPickDate;
private int mYear;
private int mMonth;
private int mDay;
private DatePickerDialog mDatePickerDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// get the current date
final Calendar c = Calendar.getInstance();
mYear = c.get(Calendar.YEAR);
mMonth = c.get(Calendar.MONTH);
mDay = c.get(Calendar.DAY_OF_MONTH);
// get references of views
mDateDisplay = (TextView) findViewById(R.id.dateDisplay); // в файле main.xml должен быть dateDisplay (TextView)
mPickDate = (Button) findViewById(R.id.pickDate); // в файле main.xml должен быть pickDate (Button)
// add a click listener to the button
mPickDate.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mDatePickerDialog = new DatePickerDialog(v.getContext(),
mDateSetListener, mYear, mMonth, mDay);
mDatePickerDialog.setCancelable(true);
mDatePickerDialog.setTitle("Pick a date");
mDatePickerDialog.show();
//showDialog(DATE_DIALOG_ID);
}
});
// display the current date in the TextView
updateDisplay();
}
// update the date in the TextView
private void updateDisplay() {
mDateDisplay.setText(new StringBuilder()
.append(mMonth + 1).append("-")
.append(mDay).append("-")
.append(mYear).append(" "));
}
// define a variable mDataSetListener
private DatePickerDialog.OnDateSetListener mDateSetListener =
new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
mYear = year;
mMonth = monthOfYear;
mDay = dayOfMonth;
updateDisplay();
}
};
}
[/syntax]
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.
Свои сообщения можно редактировать - кнопка edit.
Re: Урок 59. Диалоги. DatePickerDialog
trew, правильнее наверное на этапе присвоения корректировать
mMonth = monthOfYear+1;
а вообще интересный баг, надо было его описать в уроке
mMonth = monthOfYear+1;
а вообще интересный баг, надо было его описать в уроке
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 59. Диалоги. DatePickerDialog
Это не баг, это фича, которая есть в документации.