У меня есть класс DatePickerFragment и с ним связанная кнопка. В итоге у меня появляется окошко с выбором даты. Я хочу сделать такое же окошко, только с выбором времени TimePickerFragment. Т.к. классы похожи, их нужно немного изменить, но у меня что-то пошло не так. В конце я выделил проблемный участок комментариями. Что нужно изменить?
public class DatePickerFragment extends DialogFragment {
public static final String EXTRA_DATE =
"com.diplom.android.diplom.taskIntent.date";
private static final String ARG_DATE = "date";
private DatePicker mDatePicker;
//Передача даты через аргументы = объект дэйт аргумент фрагмента
public static DatePickerFragment newInstance(Date date) {
Bundle args = new Bundle();
args.putSerializable(ARG_DATE, date);
DatePickerFragment fragment = new DatePickerFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState){
Date date = (Date) getArguments().getSerializable(ARG_DATE);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
int mouth = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
View v = LayoutInflater.from(getActivity())
.inflate(R.layout.dialog_date, null);
mDatePicker = (DatePicker) v.findViewById(R.id.dialog_date_picker);
mDatePicker.init(year, mouth, day, null);
return new AlertDialog.Builder(getActivity())
.setView(v)
.setTitle(R.string.date_picker_title)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
int year = mDatePicker.getYear();
int month = mDatePicker.getMonth();
int day = mDatePicker.getDayOfMonth();
Date date = new GregorianCalendar(year, month, day).getTime();
sendResult(Activity.RESULT_OK, date);
}
})
.create();
}
private void sendResult(int resultCode, Date date){
if (getTargetFragment() == null) {
return;
}
Intent intent = new Intent();
intent.putExtra(EXTRA_DATE, date);
getTargetFragment()
.onActivityResult(getTargetRequestCode(), resultCode, intent);
}
}
И кнопка, с которой он связан
mDateButton = (Button) v.findViewById(R.id.task_date_title);
updateDate();
mDateButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentManager manager = getFragmentManager();
DatePickerFragment dialog = DatePickerFragment.newInstance(mTask.getDate());
dialog.setTargetFragment(TaskFragment.this, Request_DATE);
dialog.show(manager, DIALOG_DATE);
}
});
Мне нужно сделать TimePickerFragment. Вот, что у меня вышло.
@Override
public Dialog onCreateDialog(Bundle savedInstanceState){
Date date = (Date) getArguments().getSerializable(ARG_TIME);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
//calendar.setTime(date);
// mTimePicker.setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY));
// mTimePicker.setCurrentMinute(calendar.get(Calendar.MINUTE));
int hours = calendar.get(Calendar.HOUR);
int minutes = calendar.get(Calendar.MINUTE);
View v = LayoutInflater.from(getActivity())
.inflate(R.layout.dialog_time, null);
mTimePicker = (TimePicker) v.findViewById(R.id.dialog_time_picker);
mTimePicker.setIs24HourView(true);
mTimePicker.setCurrentHour(new Integer(minutes));
mTimePicker.setCurrentHour(new Integer(hours));
// mTimePicker.init(year, mouth, day, null);
return new AlertDialog.Builder(getActivity())
.setView(v)
.setTitle(R.string.time_picker_title)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
....//Вот здесь я не знаю, что сделать, чтобы
......//вернуть нужный мне объект со временем
int hours = mTimePicker.getHour();
int minuts = mTimePicker.getMinute();
Date time = ;
sendResult(Activity.RESULT_OK, time);
}
})
.create();
}
private void sendResult(int resultCode, Date time){
if (getTargetFragment() == null) {
return;
}
Intent intent = new Intent();
intent.putExtra(EXTRA_TIME, time);
getTargetFragment()
.onActivityResult(getTargetRequestCode(), resultCode, intent);
}
Берем минуты и часы, переводим в миллисекунды.
Код:
//Перевели в миллисекунды:
long minutes = TimeUnit.MINUTES.toMillis(minutes);
long hours = TimeUnit.HOURS.toMillis(hours);
// Создали дату
Date newDate = Date(hours + minutes);
спасибо @pavlofff(у)
Это из харди. Сорян за спойлер, но я сделал так:
return new AlertDialog.Builder(getActivity())
.setView(v)
.setTitle(R.string.time_picker_title)
.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
date.setHours(mTimePicker.getCurrentHour());
date.setMinutes(mTimePicker.getCurrentMinute());
date.setSeconds(0);
sendResult(Activity.RESULT_OK, date);
}
})
.create();
В примере выше используются устаревшие методы setHours(), setMinuts(), я их переработал примерно так:
return new AlertDialog.Builder(getActivity())
.setView(v)
.setTitle(R.string.time_picker_title)
.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
clock.set(Calendar.HOUR,mTimePicker.getCurrentHour()); //это экземпляр Calendar
clock.set(Calendar.MINUTE,mTimePicker.getCurrentMinute()); //это экземпляр Calendar
date.setMinutes(mTimePicker.getCurrentMinute());
date.setTime(clock.getTimeInMillis());
sendResult(Activity.RESULT_OK, date);
}
})
.create();
здесь все еще содержатся устаревшие методы (getCurrentHour(), getCurrentMinute()), но это легко исправить, стерев слово Current в вызове метода, мне же компилятор не дает это сделать, так как я писал под API от 19, а эти методы поддерживаются API не ниже 23, а проверку условия установленной версии андрюши мне лень было писать. Всем ромашек ))
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Добрый день нужно на сервер отправлять данные ф формате 16 речной системы ASCIIК примеру -1 как FFFFFFFF соответсвенно -2 как FFFFFFFE