Haris Khan
Haris Khan

Reputation: 3

How to set 1 timepicker in 2 different EditText?

I have 2 edit text fields one for starting time and one for ending time. And I have written a single java function for time picker for both of the edit text fields.

The issue is when I try to set time in the ending time edit text field it sets time to the starting time edit text field.

This my xml code:

<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">

This is my java code for time picker:

    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);

      }

Upvotes: 0

Views: 41

Answers (2)

Haris Khan
Haris Khan

Reputation: 3

Let my startingTimeAndEndingTime Function accept an EditText parameter like this: public void startingTimeAndEndingTime(EditText editText)

And then inside that method, replace startingTime.setText(MessageFormat.format("{0}:{1}{2}", hourOfDay, minuteWith_0_OnLeft, amPm)); with this: editText.setText(MessageFormat.format("{0}:{1}{2}", hourOfDay, minuteWith_0_OnLeft, amPm));

Now in onClick of startingTime and endingTime, call the method like this, for startingTime: startingTimeAndEndingTime(startingTime);

and for endingTime: startingTimeAndEndingTime(endingTime);

SO my code will be like this:

startingTime = findViewById(R.id.starting_time_et);

    startingTime.setOnClickListener(new View.OnClickListener()
    {

        @Override
        public void onClick(View v)
        {

            startingTimeAndEndingTime( startingTime );

            timePickerDialog.show();

        }
    });

    endingTime = findViewById(R.id.ending_time_et);

    endingTime.setOnClickListener(new View.OnClickListener()
    {

        @Override
        public void onClick(View v)
        {

            startingTimeAndEndingTime( endingTime );

            timePickerDialog.show();

        }
    });

public void startingTimeAndEndingTime( EditText startingAndEndingTImeEt ) {

    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(hourOfDay + ":" + minute + amPm);

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

        }

    }, currentHour, currentMinute, false);

}

Upvotes: 0

Susan Thapa
Susan Thapa

Reputation: 581

The code is working as expected. You are setting the text of the startingTime EditText in startingTimeAndEndingTime() function and calling it from both startingTime and endingTime click listener. To fix this you can modify your your startingTimeAndEndingTime() function like this.

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);

}

Upvotes: 1

Related Questions