import android.app.Dialog;
import android.app.TimePickerDialog;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TimePicker;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* Created by Ketan Ramani on 20/9/18.
*/
public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener {
private static EditText text;
private static TextView textTv;
private static Date startDate = null;
private static Date fromTime = null;
public static TimePickerFragment getInstance(View view) {
if (view instanceof EditText) {
text = (EditText) view;
} else if (view instanceof TextView) {
textTv = (TextView) view;
}
return new TimePickerFragment();
}
public static TimePickerFragment getInstance(View view, Date fromTimeCalendar) {
if (view instanceof EditText) {
text = (EditText) view;
} else if (view instanceof TextView) {
textTv = (TextView) view;
}
fromTime = fromTimeCalendar;
return new TimePickerFragment();
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
// Create a new instance of TimePickerDialog and return it
return new TimePickerDialog(getActivity(), this, hour, minute, true/*DateFormat.is24HourFormat(getActivity())*/);
}
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
if (fromTime != null) {
Calendar fromTimeCal = Calendar.getInstance();
fromTimeCal.setTime(fromTime);
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm");
Date toDate = null;
try {
toDate = sdf.parse(String.format("%02d", hourOfDay) + ":" + String.format("%02d", minute));
} catch (ParseException e) {
e.printStackTrace();
}
Calendar toTimeCal = Calendar.getInstance();
toTimeCal.setTime(toDate);
if (toTimeCal.getTimeInMillis()<fromTimeCal.getTimeInMillis()){
Helper.showToast(getActivity(),"To time can't less than from time");
} else {
if (text != null) {
text.setText(getFormatedTime(hourOfDay, minute));
} else if (textTv != null) {
textTv.setText(getFormatedTime(hourOfDay, minute));
}
}
} else {
if (text != null) {
text.setText(getFormatedTime(hourOfDay, minute));
} else if (textTv != null) {
textTv.setText(getFormatedTime(hourOfDay, minute));
}
}
}
private String getFormatedTime(int hourOfDay, int minute) {
int hour, min;
Calendar datetime = Calendar.getInstance();
String am_pm = "";
datetime.set(Calendar.HOUR_OF_DAY, hourOfDay);
datetime.set(Calendar.MINUTE, minute);
if (datetime.get(Calendar.AM_PM) == Calendar.AM)
am_pm = "AM";
else if (datetime.get(Calendar.AM_PM) == Calendar.PM)
am_pm = "PM";
hourOfDay = hourOfDay > 12 ? hourOfDay - 12 : hourOfDay;
hour = hourOfDay > 9 ? hourOfDay : hourOfDay;
min = minute > 9 ? minute : minute;
return String.format("%02d", hour) + ":" + String.format("%02d", min) + " " + am_pm;
}
public void showTimePickerDialog(Context context, View view) {
DialogFragment newFragment = TimePickerFragment.getInstance(view);
newFragment.show(((AppCompatActivity) context).getSupportFragmentManager(), "TimePicker");
}
public void showTimePickerDialog(Context context, View view, Date fromTime) {
DialogFragment newFragment = TimePickerFragment.getInstance(view, fromTime);
newFragment.show(((AppCompatActivity) context).getSupportFragmentManager(), "TimePicker");
}
}
Use
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.et_from_time:
TimePickerFragment fromTime = new TimePickerFragment();
fromTime.showTimePickerDialog(context, v, null);
mToTimeEt.setText("Select To Time");
break;
case R.id.et_to_time:
if(mFromTimeEt.getText().toString().equalsIgnoreCase("Select From Time")){
Helper.showToast(context,"Please, select from time first");
} else {
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm a");
Date fromDate = null;
try {
fromDate = sdf.parse(mFromTimeEt.getText().toString());
} catch (ParseException e) {
e.printStackTrace();
}
TimePickerFragment toTime = new TimePickerFragment();
toTime.showTimePickerDialog(context, v, fromDate);
}
break;
}
}
This class will work for EditText and TextView and set time to respected EditText or TextView if To time is After From Time in HH:mm a Format