首页 > 解决方案 > 如何在 2 个不同的 EditText 中设置 1 个时间选择器?

问题描述

我有 2 个编辑文本字段,一个用于开始时间,一个用于结束时间。我为两个编辑文本字段的时间选择器编写了一个 java 函数。

问题是当我尝试在结束时间编辑文本字段中设置时间时,它会将时间设置为开始时间编辑文本字段。

这是我的 xml 代码:

<androidx.appcompat.widget.AppCompatEditText
        android:id="@+id/starting_time_et"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="305dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:hint="Click To Add Starting Time Of Course"
        android:textStyle="bold">

    </androidx.appcompat.widget.AppCompatEditText>

    <androidx.appcompat.widget.AppCompatEditText
        android:id="@+id/ending_time_et"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginTop="355dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:hint="Click To Add Ending Time Of Course"
        android:textStyle="bold">

这是我的时间选择器 Java 代码:

    Button backButton;
    EditText startingTime;
    EditText endingTime;
    TimePickerDialog timePickerDialog;
    Calendar calender;
    int currentHour;
    int currentMinute;
    String amPm;
    String minuteWith_0_OnLeft;

    startingTime = findViewById(R.id.starting_time_et);
    startingTime.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                startingTimeAndEndingTime();
                timePickerDialog.show();
            }
        });

        endingTime = findViewById(R.id.ending_time_et);

        endingTime.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                startingTimeAndEndingTime();
                timePickerDialog.show();
            }
        });


        public void startingTimeAndEndingTime(){
        calender = Calendar.getInstance();
        currentHour = calender.get(Calendar.HOUR_OF_DAY);
        currentMinute = calender.get(Calendar.MINUTE);
        timePickerDialog = new TimePickerDialog(AddCourses.this, new 
        TimePickerDialog.OnTimeSetListener(){
            @Override
            public void onTimeSet(TimePicker timePicker, int hourOfDay, int minute){
                if(hourOfDay > 12)
                {
                    hourOfDay -= 12;
                    amPm = "Pm";
                }
                else if(hourOfDay == 0)
                {
                    hourOfDay += 12;
                    amPm = "Am";
                }
                else if(hourOfDay == 12)
                {
                    amPm = "Pm";
                }
                else
                {
                    amPm = "AM";
                }

                if( minute < 10 )
                {
                    minuteWith_0_OnLeft = "0" + minute;
                }
                else
                {
                    minuteWith_0_OnLeft = String.valueOf(minute);
                }

                startingTime.setText(MessageFormat.format("{0}:{1}{2}", hourOfDay, minuteWith_0_OnLeft, amPm));

            }
        }, currentHour, currentMinute, false);

      }

标签: javaandroiddatetimeandroid-layout

解决方案


代码按预期工作。您正在函数中设置startingTimeEditText的文本startingTimeAndEndingTime()并从两者调用它startingTimeendingTime单击侦听器。要解决此问题,您可以像这样修改您的startingTimeAndEndingTime()功能。

public void startingTimeAndEndingTime(boolean isStart) {
calender = Calendar.getInstance();
    currentHour = calender.get(Calendar.HOUR_OF_DAY);
    currentMinute = calender.get(Calendar.MINUTE);

    timePickerDialog = new TimePickerDialog(AddCourses.this, new TimePickerDialog.OnTimeSetListener()
    {
        @Override
        public void onTimeSet(TimePicker timePicker, int hourOfDay, int minute)
        {

            if(hourOfDay > 12)
            {

                hourOfDay -= 12;
                amPm = "Pm";

            }
            else if(hourOfDay == 0)
            {

                hourOfDay += 12;
                amPm = "Am";

            }
            else if(hourOfDay == 12)
            {

                amPm = "Pm";

            }
            else
            {

                amPm = "AM";

            }

            if( minute < 10 )
            {

                minuteWith_0_OnLeft = "0" + minute;

            }
            else
            {

                minuteWith_0_OnLeft = String.valueOf(minute);

            }

if (isStart) {
            startingTime.setText(MessageFormat.format("{0}:{1}{2}", hourOfDay, minuteWith_0_OnLeft, amPm));
} else {
            endingTime.setText(MessageFormat.format("{0}:{1}{2}", hourOfDay, minuteWith_0_OnLeft, amPm));
}

        }
    }, currentHour, currentMinute, false);

}

推荐阅读