Урок 59. Диалоги. DatePickerDialog

Обсуждение уроков
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Урок 59. Диалоги. DatePickerDialog

Сообщение damager82 » 23 фев 2012, 03:00

В этом уроке:

- используем 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 раза.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 59. Диалоги. DatePickerDialog

Сообщение Foenix » 08 ноя 2012, 22:23

У меня нет андроида, я запускаю все по уроку на эмуляторе. Так вот сам диалог выбора даты просто ужасен! у меня нет таких кнопочек с + и -, а просто бегунок со стрелочками вверх и вниз. не представляю, чтоб его можно было использовать. На экране, допустим, вертикакльно три числа - 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

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Урок 59. Диалоги. DatePickerDialog

Сообщение neoksi » 08 ноя 2012, 23:55

Olivka
Приобретите бюджетное устройство и тестируйте все на нем, намного проще жизнь становится.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 59. Диалоги. DatePickerDialog

Сообщение Foenix » 09 ноя 2012, 00:29

Пока не заработала :)
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

lancer
Сообщения: 12
Зарегистрирован: 21 ноя 2012, 23:12

Re: Урок 59. Диалоги. DatePickerDialog

Сообщение lancer » 08 янв 2013, 15:25

Добрый. У меня при выводе даты номер месяца на единицу меньше (январь - 0 итд) Это так и должно быть? Я конечно прописал Month + 1, но хотелось бы знать.
И еще вопрос не по теме. Приложения для 2.3.3 будут работать на 4.1? (где то в форуме это мелькало, но найти я не могу)
Заранее спасибо.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 59. Диалоги. DatePickerDialog

Сообщение rezak90 » 08 янв 2013, 18:58

Добрый. У меня при выводе даты номер месяца на единицу меньше (январь - 0 итд) Это так и должно быть? Я конечно прописал Month + 1, но хотелось бы знать.
это есть такой косяк, сам на него не давно попался, хоть и потратил пол часа но всё же не приятно =) но да, так и должно быть
И еще вопрос не по теме. Приложения для 2.3.3 будут работать на 4.1?
это смотря что, 99.9% работает, но есть "фишечки" которые нет, здесь как говорится нужен и опыт и знание новшеств и архитектуры версий.
R.id.team
Политика на форуме запрещена

igrok-vip
Сообщения: 56
Зарегистрирован: 29 апр 2013, 11:53

Re: Урок 59. Диалоги. DatePickerDialog

Сообщение igrok-vip » 24 июн 2013, 13:14

Здравствуйте. Скажите, почему DateDialogPicker так сильно глючит на андроид 4.1?
При нажатии готово обработчик срабатывает 2 раза. Если ткнуть мимо диалога, он закроется, и при этом тоже срабатывает обработчик. Из-за чего это? Как это вылечить?
Повторное срабатывание временно вылечил с помощью подсчёта срабатываний и обнуления количества при создании диалога. Но что делать с отменой диалога?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 59. Диалоги. DatePickerDialog

Сообщение Foenix » 24 июн 2013, 13:56

С отменой не сложно, достаточно выставить флажок http://developer.android.com/reference/ ... e(boolean) и он перестанет реагировать на нажатия снаружи.
Так же нужно не забывать обрабатывать и кнопку Cancel, и закрытие диалога по кнопке "назад" (например, в диаложеках набора пароля).

Про двойное срабатывание не знаю, возможно просто в логике где-то ошибка.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

igrok-vip
Сообщения: 56
Зарегистрирован: 29 апр 2013, 11:53

Re: Урок 59. Диалоги. DatePickerDialog

Сообщение igrok-vip » 24 июн 2013, 14:27

Или я чего-то не понимаю, или не работает.
Относительно урока сделал так:
В onCreateDialog
перед выводом диалога:
tpd.getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
Но ничего не изменилось. Окошко закрывается, обработчик срабатывает.

На счёт Cancel, назад тоже не понял. В этом диалоге же предусмотрена своя одна кнопка(в андроид 4) "Готово" и setPositiveButton, setNegativeButton тут не работают.

Про двойное срабатывание. проблема не в логике, а в самом диалоге. На 2.1 срабатывает 1 раз.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 59. Диалоги. DatePickerDialog

Сообщение Foenix » 24 июн 2013, 14:37

Да, ты прав, наверное к DatePicker-у это не применимо..
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

ebtehun
Сообщения: 2
Зарегистрирован: 14 авг 2013, 15:11

Re: Урок 59. Диалоги. DatePickerDialog

Сообщение ebtehun » 14 авг 2013, 15:25

Здравствуйте!
Во-первых, спасибо за основательный подход. Собственно, вопрос:
Можно ли выводить текущую дату? (Кстати, неплохо было бы это и в самом уроке прописать)
Последний раз редактировалось ebtehun 14 авг 2013, 16:10, всего редактировалось 1 раз.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 59. Диалоги. DatePickerDialog

Сообщение Mikhail_dev » 14 авг 2013, 15:53

Создание диалогов
[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]
код вырезками, но думаю разберетесь тут.

ebtehun
Сообщения: 2
Зарегистрирован: 14 авг 2013, 15:11

Re: Урок 59. Диалоги. DatePickerDialog

Сообщение ebtehun » 14 авг 2013, 20:39

Я заметил, что текущую дату можно сразу объявить в переменных, это ведь не ошибка :?:

Код: Выделить всё

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);


axtrace
Сообщения: 1
Зарегистрирован: 15 сен 2013, 02:38

Re: Урок 59. Диалоги. DatePickerDialog

Сообщение axtrace » 15 сен 2013, 18:58

Код: Выделить всё

showDialog(DIALOG_DATE);
ShowDialog(int)' is deprecated less... (Ctrl+F1)
This inspection reports where deprecated code is used in the specified inspection scope.
уже устарел, как обойтись без него?

Kruler
Сообщения: 28
Зарегистрирован: 27 авг 2013, 13:02

Re: Урок 59. Диалоги. DatePickerDialog

Сообщение Kruler » 15 сен 2013, 19:24

axtrace писал(а):

Код: Выделить всё

showDialog(DIALOG_DATE);
ShowDialog(int)' is deprecated less... (Ctrl+F1)
This inspection reports where deprecated code is used in the specified inspection scope.
уже устарел, как обойтись без него?
DialogFragment или FragmentManager, но учитывая то, что выше упомянутые классы доступны только в апи 13+, то продолжай использовать и дальше ShowDialog, ну или саппорт либу.

Аватара пользователя
Isaev
Сообщения: 145
Зарегистрирован: 03 сен 2013, 09:39
Откуда: Германия
Контактная информация:

Re: Урок 59. Диалоги. DatePickerDialog

Сообщение Isaev » 23 окт 2013, 14:33

Почему так не работает?

Код: Выделить всё

  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);
  }
Хотел текущую дату выставить по умолчанию

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: Урок 59. Диалоги. DatePickerDialog

Сообщение trew » 24 окт 2013, 00:22

Isaev Хотел текущую дату выставить по умолчанию.
[syntax=java]import java.util.Calendar;

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.

Аватара пользователя
Isaev
Сообщения: 145
Зарегистрирован: 03 сен 2013, 09:39
Откуда: Германия
Контактная информация:

Re: Урок 59. Диалоги. DatePickerDialog

Сообщение Isaev » 25 окт 2013, 11:17

trew, правильнее наверное на этапе присвоения корректировать
mMonth = monthOfYear+1;
а вообще интересный баг, надо было его описать в уроке

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 59. Диалоги. DatePickerDialog

Сообщение Mikhail_dev » 25 окт 2013, 11:56

Это не баг, это фича, которая есть в документации.

Ответить