Страница 1 из 4

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

Добавлено: 23 фев 2012, 03:00
damager82
В этом уроке:

- используем DatePickerDialog

[url=http://www.startandroid.ru/ru/uroki/vse ... l:36jj1qyn]Click here to read this article![/url:36jj1qyn]

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

Добавлено: 08 ноя 2012, 22:23
Foenix
У меня нет андроида, я запускаю все по уроку на эмуляторе. Так вот сам диалог выбора даты просто ужасен! у меня нет таких кнопочек с + и -, а просто бегунок со стрелочками вверх и вниз. не представляю, чтоб его можно было использовать. На экране, допустим, вертикакльно три числа - 01 02 03. 02- значит текущее, я хочу допустим поставить первое число. Если я щелкаю по 01 то дата становится наоборот - 03! т.е. этот бегунок крутится в другую сторону.. просто катастрофа. Да еще и все на английском..
интересно, на реальных устройствах тоже так же? ох, надо свой писать :(

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

Добавлено: 08 ноя 2012, 23:55
neoksi
Olivka
Приобретите бюджетное устройство и тестируйте все на нем, намного проще жизнь становится.

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

Добавлено: 09 ноя 2012, 00:29
Foenix
Пока не заработала :)

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

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

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

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

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

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

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

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

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

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

Добавлено: 24 июн 2013, 14:27
igrok-vip
Или я чего-то не понимаю, или не работает.
Относительно урока сделал так:
В 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

Добавлено: 24 июн 2013, 14:37
Foenix
Да, ты прав, наверное к DatePicker-у это не применимо..

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

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

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

Добавлено: 14 авг 2013, 15:53
Mikhail_dev
Создание диалогов
[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

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

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

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

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

Добавлено: 15 авг 2013, 10:04
Mikhail_dev
Нет, не ошибка.

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

Добавлено: 15 сен 2013, 18:58
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

Добавлено: 15 сен 2013, 19:24
Kruler
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, ну или саппорт либу.

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

Добавлено: 23 окт 2013, 14:33
Isaev
Почему так не работает?

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

  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

Добавлено: 24 окт 2013, 00:22
trew
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]

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

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

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

Добавлено: 25 окт 2013, 11:56
Mikhail_dev
Это не баг, это фича, которая есть в документации.