Reputation: 3
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
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
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