Новичок в программировании на JAVA и Android и пробовал свой первый практический проект.
Я не понимаю, как заставить обработку ждать, пока timekeeperdialog не вернет значение.
В своей основной деятельности я создал геттеры и сеттеры для переменных (кстати, впервые):
private int pickhour;
private int pickminute;
public MainActivity(){
pickhour = 0;
pickminute = 0;
}
public void setpickhour(int pickhour) {
this.pickhour = pickhour;
}
public int getpickhour(){
return this.pickhour;
}
public void setpickminute(int pickminute) {
this.pickminute = pickminute;
}
public int getPickminute(int pickminute) {
return this.pickminute;
}
Я вызываю диалоговое окно с этим, а затем ожидаю, что обработка приостановится, пока TimePicker не вернет значение, у меня есть тост, чтобы показать результаты. Тост запускается, как только появляется Timepicker.
DialogFragment newFragment = new TimePickerFragment();
newFragment.show(getFragmentManager(),"TimePicker");
Toast.makeText(getApplicationContext(), "Time Picker" + String.valueOf(pickhour) + ":" + String.valueOf(pickminute), Toast.LENGTH_LONG).show();
А мой фрагмент выглядит так:
public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener{
private MainActivity ma = new MainActivity();
@Override
public Dialog onCreateDialog(Bundle savedInstanceState){
//Use the current time as the default values for the time picker
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
//Create and return a new instance of TimePickerDialog
return new TimePickerDialog(getActivity(),this, hour, minute,
DateFormat.is24HourFormat(getActivity()));
}
//onTimeSet() callback method
public void onTimeSet(TimePicker view, int hourOfDay, int minute){
//Do something with the user chosen time
//Get reference of host activity (XML Layout File) TextView widget
ma.setpickhour(hourOfDay);
ma.setpickminute(minute);
}
}
Я попытался выполнить цикл через логическое значение, установленное методом ontimeset, чтобы принудительно ожидать возвращаемое значение, но мое приложение просто зависло.
Какая фундаментальная концепция мне не хватает? Я в отпуске, поэтому потратил полтора дня, пытаясь понять это.
Я не знаю, как на это ответить; Я новичок в этом. Как только приложение выполнит строку: DialogFragment newFragment = new TimePickerFragment (); Появляется таймер, и тосты зажигаются.
Я ожидал, что смогу написать такой метод: timeChosen = askUserToPickTime (); но теперь поймите, что это не так. Я программист-любитель VBA, изо всех сил пытаюсь изучить программирование на Java и Android.
Вы не единственный, кто попал в эту ловушку - я помню свой первый диалог входа в систему :) Вы должны использовать какой-то тип Listener с диалогом, чтобы получить результат от действий пользователя. Может быть, этот руководство в диалогах будет полезен. Также есть специальный раздел о Диалоги TimePicker
Я могу разобраться с этим. Вместо того, чтобы TimePickerDialog возвращал значения обратно в мой класс MainActivity, я вызываю методы, которые мне нужно выполнить после выбора времени, из класса TimePickerFragment.




Вы можете попробовать это -
public class TimePickerFragment extends DialogFragment implements
TimePickerDialog.OnTimeSetListener{
private MainActivity ma = new MainActivity();
@Override
public Dialog onCreateDialog(Bundle savedInstanceState){
//Use the current time as the default values for the time picker
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
//Create and return a new instance of TimePickerDialog
return new TimePickerDialog(getActivity(),this, hour, minute,
DateFormat.is24HourFormat(getActivity()));
}
//onTimeSet() callback method
public void onTimeSet(TimePicker view, int hourOfDay, int minute){
//Do something with the user chosen time
//Get reference of host activity (XML Layout File) TextView widget
ma.setpickhour(hourOfDay);
ma.setpickminute(minute);
Toast.makeText(getApplicationContext(), "Time Picker" + String.valueOf(pickhour) + ":" + String.valueOf(pickminute), Toast.LENGTH_LONG).show();
}
}
И если вы используете только фрагмент для timePicker, фрагмент не нужен.
В этом случае вы можете попробовать это в MainActivity -
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
TimePickerDialog mTimePicker;
mTimePicker = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int hourOfDay, int minute) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, hourOfDay);
cal.set(Calendar.MINUTE, minute);
setpickhour(hourOfDay);
setpickminute(minute);
}
}, hour, minute, true);//Yes 24 hour time
mTimePicker.setTitle("Time Picker");
mTimePicker.show();
Ваш код работает? Потому что вы не можете передать «this» в качестве второго аргумента в конструкторе TimePickerDialog.
>> Ваш код работает? Поскольку вы не можете передать «this» в качестве второго аргумента в TimePickerDialog, да, это так. >> И если вы используете только фрагмент для timePicker, фрагмент не нужен. Когда я впервые создал TimePicker (не диалог), я не получал кнопки «ОК», «Отмена». Я обнаружил образец кода с TimePickerDialog в нем, который дал мне OK / Cancel, но был настроен как фрагмент. Ваш комментарий о том, что это не обязательно должно быть во фрагменте, привел меня к новому примеру, где он отлично работает в MainActivity тестового приложения.
В методе OnTimeSet моего нового кода я могу получить заданное значение. Мне нужно выяснить, как обнаружить кнопку «Отмена». Я не могу понять, как получить формат часов с AM / PM. Появляются часы с 24-часовым выбором. Я пробовал разные темы. Код, который я нашел, находится в pastebin.com/AANbnzHb. Я подхожу ближе. Спасибо вам всем.
какая обработка, выполняется ли обработка потоками?