время устанавливается на те же текстовые представления - PullRequest
0 голосов
/ 01 апреля 2020

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

время начала может быть только 3:30 или 4:30, а не 5, не 4 или 3. ... если текущее время равно 4, то время по умолчанию должно начинаться с 4:30

, а время окончания sh имеет те же правила

у меня есть представление времени и работает сборщик

проблема в том, что выбранное время устанавливается как в начальном, так и в конечном sh текстовых представлениях. Не могу понять, почему я до сих пор решаю проблему с полчаса, но wi sh, чтобы сделать это самостоятельно любые советы, хотя было бы благодарно

            public class TimePickerFragment extends DialogFragment
            {
                @NonNull
                @Override
                public Dialog onCreateDialog(@Nullable Bundle savedInstanceState)
                {
                    Calendar calTime = Calendar.getInstance();
                    int hour = calTime.get(Calendar.HOUR_OF_DAY);
                    int min = calTime.get(Calendar.MINUTE );
                    return new TimePickerDialog(getActivity(), (TimePickerDialog.OnTimeSetListener) getActivity(), hour, min, android.text.format.DateFormat.is24HourFormat(getActivity()));
                }
            }

         displayStartTime.setOnClickListener(new View.OnClickListener()
                {
                    @Override
                    public void onClick(View v)
                    {
                        DialogFragment startTimePicker = new TimePickerFragment();
                        startTimePicker.show(getSupportFragmentManager(), "startTimePicker");
                    }
                });

                TextView displayFinishTime = (TextView) findViewById(R.id.finishTimeView);
                displayFinishTime.setOnClickListener(new View.OnClickListener()
                {
                    @Override
                    public void onClick(View v)
                    {
                        DialogFragment finishTimePicker = new TimePickerFragment();
                        finishTimePicker.show(getSupportFragmentManager(), "finishTimePicker");
                    }
                });


          public void onTimeSet(TimePicker view, int hourOfDay, int minute)
            {
                TextView startTextView = (TextView)findViewById(R.id.startTimeView);
                startTextView.setText(hourOfDay+":"+minute);

                TextView finishTextView = (TextView)findViewById(R.id.finishTimeView);
                finishTextView.setText(hourOfDay+":"+minute);


            }

         <TextView
                android:id="@+id/finishTimeView"
                android:layout_width="161dp"
                android:layout_height="25dp"
                android:layout_marginEnd="44dp"
                android:layout_marginBottom="99dp"
                android:text="Choose Finish Time"
                android:textAlignment="center"
                android:textColor="#000000"
                android:textSize="18sp"
                app:layout_constraintBottom_toTopOf="@+id/confirmBooking"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toEndOf="@+id/timefinishText"
                app:layout_constraintTop_toBottomOf="@+id/startTimeView" />

            <TextView
                android:id="@+id/startTimeView"
                android:layout_width="161dp"
                android:layout_height="25dp"
                android:layout_marginEnd="44dp"
                android:layout_marginBottom="40dp"
                android:text="Choose Start Time"
                android:textAlignment="center"
                android:textColor="#000000"
                android:textSize="18sp"
                app:layout_constraintBottom_toTopOf="@+id/finishTimeView"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toEndOf="@+id/timestartText"
                app:layout_constraintTop_toBottomOf="@+id/dateView" />

1 Ответ

0 голосов
/ 01 апреля 2020

Там есть некоторые проблемы, вы реализуете этот интерфейс TimePickerDialog.OnTimeSetListener, который будет вызываться каждый раз, когда TimePickerDialog закрывается, так что он всегда будет получать последний, что вы можете сделать, это удалить этот интерфейс и реализовать его себя.

TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
                    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                        //Do the changes to the TextView
                    }
                };

И вы назначаете его всякий раз, когда хотите создать TimePickerDialog, также вы можете удалить TimePickerFragment.java и сделать в тот же класс в данный момент, чтобы проверить, работает ли он, потому что вы Затем вам нужно будет передать его в качестве параметра.

И для 30 минут вам нужно создать CustomTimePicker, чтобы сделать это.

public class DurationTimePickDialog extends TimePickerDialog
{
    public static final int TIME_PICKER_INTERVAL = 30;
    private boolean mIgnoreEvent = false;

    public DurationTimePickDialog(
        Context context, OnTimeSetListener callBack, int hourOfDay, int minute,
        boolean is24HourView)
    {
        super(context, callBack, hourOfDay, minute, is24HourView);
    }


    @Override
    public void onTimeChanged(TimePicker timePicker, int hourOfDay, int minute)
    {
        super.onTimeChanged(timePicker, hourOfDay, minute);
        if (!mIgnoreEvent)
        {
            minute = getRoundedMinute(minute);
            mIgnoreEvent = true;
            timePicker.setCurrentMinute(minute);
            mIgnoreEvent = false;
        }
    }

    public static int getRoundedMinute(int minute)
    {
        if (minute % TIME_PICKER_INTERVAL != 0)
        {
            int minuteFloor = minute - (minute % TIME_PICKER_INTERVAL);
            minute = minuteFloor + (minute == minuteFloor + 1 ? TIME_PICKER_INTERVAL : 0);
            if (minute == 60)
            {
                minute = 0;
            }
        }
        return minute;
    }
}

С этим классом, который вы можете создать TimePickerDialog как:

DurationTimePickDialog durationTimePickDialog = new DurationTimePickDialog(v.getContext(), mTimeSetListener,hour,min,true);
                durationTimePickDialog.show();

Вы сможете принять только 30 минут, в противном случае не будет кликабельным, но ИМХО это не правильный способ сделать это, с другим widget будет работать также.

Надеюсь, это поможет.

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