Ожидание, пока TimePickerFragment вернет время

Новичок в программировании на 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, чтобы принудительно ожидать возвращаемое значение, но мое приложение просто зависло.

Какая фундаментальная концепция мне не хватает? Я в отпуске, поэтому потратил полтора дня, пытаясь понять это.

какая обработка, выполняется ли обработка потоками?

Emotional_Goose 07.12.2018 18:11

Я не знаю, как на это ответить; Я новичок в этом. Как только приложение выполнит строку: DialogFragment newFragment = new TimePickerFragment (); Появляется таймер, и тосты зажигаются.

Mark S. 07.12.2018 19:03

Я ожидал, что смогу написать такой метод: timeChosen = askUserToPickTime (); но теперь поймите, что это не так. Я программист-любитель VBA, изо всех сил пытаюсь изучить программирование на Java и Android.

Mark S. 07.12.2018 19:06

Вы не единственный, кто попал в эту ловушку - я помню свой первый диалог входа в систему :) Вы должны использовать какой-то тип Listener с диалогом, чтобы получить результат от действий пользователя. Может быть, этот руководство в диалогах будет полезен. Также есть специальный раздел о Диалоги TimePicker

Bö macht Blau 07.12.2018 20:25

Я могу разобраться с этим. Вместо того, чтобы TimePickerDialog возвращал значения обратно в мой класс MainActivity, я вызываю методы, которые мне нужно выполнить после выбора времени, из класса TimePickerFragment.

Mark S. 07.12.2018 23:29
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
152
1

Ответы 1

Вы можете попробовать это -

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 тестового приложения.

Mark S. 09.12.2018 02:12

В методе OnTimeSet моего нового кода я могу получить заданное значение. Мне нужно выяснить, как обнаружить кнопку «Отмена». Я не могу понять, как получить формат часов с AM / PM. Появляются часы с 24-часовым выбором. Я пробовал разные темы. Код, который я нашел, находится в pastebin.com/AANbnzHb. Я подхожу ближе. Спасибо вам всем.

Mark S. 09.12.2018 02:13

Другие вопросы по теме