Сбросить сборщик времени

Я хочу выбрать два разных времени, когда отображается мое диалоговое окно выбора времени, но после его сохранения в первый раз средство выбора времени сохраняет час, который был ранее выбран, и настроен на выбор минут. По сути, я хочу обновить виджет, чтобы после того, как я щелкнул для подтверждения в первый раз, средство выбора времени было настроено на выбор часов вместо минут.

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

Средство выбора времени в основном находится в другом макете, чем тот, который вызывается и вызывается как диалоговое окно.

Dialog mydialog;
mydialog.setContentView(R.layout.timepickerpopup);

a[0] имеет значение true в методе создания, вне конфигурации макета всплывающего окна.

done.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (Build.VERSION.SDK_INT >= 23 && a[0]) {
            hour[0] = timePicker.getHour();
            min[0] = timePicker.getMinute();

            timefrom.setText(String.format(Locale.getDefault(),
                "%02d:%02d", hour[0], min[0]));

            a[0] = false;
        }
        else if (Build.VERSION.SDK_INT >= 23 &&  !a[0]) {
            hour[1] = timePicker.getHour();
            min[1] = timePicker.getMinute();

            timeuntil.setText(String.format(Locale.getDefault(),
                "%02d:%02d", hour[1], min[1]));

            mydialog.dismiss();

        }
        else if (a[0]) {
            hour[0] = timePicker.getCurrentHour();
            min[0] = timePicker.getCurrentMinute();

            timefrom.setText(String.format(Locale.getDefault(),
                "%02d:%02d", hour[0], min[0]));

            a[0] = false;
        }
        else {
            hour[1] = timePicker.getCurrentHour();
            min[1] = timePicker.getCurrentMinute();

             timeuntil.setText(String.format(Locale.getDefault(),
                "%02d:%02d", hour[1], min[1]));

            mydialog.dismiss();
        }
    }
});

person Stathis    schedule 05.08.2019    source источник


Ответы (1)


В итоге я использовал 2 разных таймера и переключался между ними, чтобы получить 2 разных часа, которые я хотел.

TimePicker timePicker1 = myDialog.findViewById(R.id.timePicker1);
TimePicker timePicker2 = myDialog.findViewById(R.id.timePicker2);

Вот код, если он кому-то нужен:

if (Build.VERSION.SDK_INT >= 23 && timePicker1.getVisibility() == View.VISIBLE){

                hour[0] = timePicker1.getHour();
                min[0] = timePicker1.getMinute();

                timefrom.setText(String.format(Locale.getDefault(),
                "%02d:%02d",hour[0], min[0]));

                timePicker1.setVisibility(View.GONE);
                timePicker2.setVisibility(View.VISIBLE);

                a[0] = true;

                if (a[0] && a[1]){
                    mydialog.dismiss();
                }

}else if (Build.VERSION.SDK_INT >= 23 &&  timePicker2.getVisibility() == 
          View.VISIBLE) {

                hour[1] = timePicker2.getHour();
                min[1] = timePicker2.getMinute();

                timeuntil.setText(String.format(Locale.getDefault(),
                "%02d:%02d",hour[1], min[1]));

                 if (a[0]) {
                    mydialog.dismiss();
                }else {
                    timePicker1.setVisibility(View.VISIBLE);
                    timePicker2.setVisibility(View.GONE);
                }
                a[1] = true; 
}else if (timePicker1.getVisibility() == View.VISIBLE){

                hour[0] = timePicker1.getCurrentHour();
                min[0] = timePicker1.getCurrentMinute();

                timefrom.setText(String.format(Locale.getDefault(),
                "%02d:%02d",hour[0], min[0]));

                timePicker1.setVisibility(View.GONE);
                timePicker2.setVisibility(View.VISIBLE);

                a[0] = true;

                if (a[0] && a[1]){
                    mydialog.dismiss();
                }

}else {
                hour[1] = timePicker2.getCurrentHour();
                min[1] = timePicker2.getCurrentMinute();

                timeuntil.setText(String.format(Locale.getDefault(),
                "%02d:%02d",hour[1], min[1]));

                 if (a[0]) {
                    mydialog.dismiss();
                }else {
                    timePicker1.setVisibility(View.VISIBLE);
                    timePicker2.setVisibility(View.GONE);
                }
                a[1] = true;
}

В другой части кода я сделал это так, чтобы вы могли выбрать, какой час вы устанавливаете, нажав на его текст (от / до), поэтому мне нужно, чтобы [0] был истинным, прежде чем закрыть диалоговое окно (так что оба раза будут установлены когда закончите, если вы не отмените).

Поскольку я новичок в этом, если кто-нибудь знает ответ на мой вопрос или у него есть какие-то улучшения для моего кода, мы будем признательны, если он поделится здесь.

person Stathis    schedule 05.08.2019