how to get hour and minute from timepicker in android

17,382

Solution 1

If you clear focus from the TimePicker in your onClick() handler, you can use its public methods to get the selected time values as integers:

public void onClick(View v) {
    ...
    notifyTime = ((TimePicker) findViewById(R.id.alarm_time));
    notifyTime.clearFocus();

    hour = notifyTime.getCurrentHour();
    minute = notifyTime.getCurrentMinute();
    ....
}

Solution 2

Use this method setOnTimeChangedListener(TimePicker.OnTimeChangedListener onTimeChangedListener)

and this class when working with timepicker. timepicker

not onclick listener on it..

Share:
17,382
TheGPWorx
Author by

TheGPWorx

"To code is to unlock the world's secrets."

Updated on June 18, 2022

Comments

  • TheGPWorx
    TheGPWorx almost 2 years

    This is code I got for TimePicker.

    TimePicker.java

    public class TimePicker extends EditText implements
        android.app.TimePickerDialog.OnTimeSetListener {
    public interface OnTimeSetListener {
        public void onTimeSet(TimePicker view, int hour, int minute);
    }
    
    protected int hour;
    protected int minute;
    protected OnTimeSetListener onTimeSetListener;
    protected java.text.DateFormat timeFormat;
    
    public int getHour() {
        return hour;
    }
    
    public OnTimeSetListener getOnTimeSetListener() {
        return onTimeSetListener;
    }
    
    public void setOnTimeSetListener(OnTimeSetListener onTimeSetListener) {
        this.onTimeSetListener = onTimeSetListener;
    }
    
    public void setHour(int hour) {
        this.hour = hour;
        updateText();
    }
    
    public int getMinute() {
        return minute;
    }
    
    public void setNow() {
        Calendar c = Calendar.getInstance();
        setTime(c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE));
    }
    
    public void setMinute(int minute) {
        this.minute = minute;
        updateText();
    }
    
    public void setTime(int hour, int minute) {
        this.hour = hour;
        this.minute = minute;
        updateText();
    }
    
    public TimePicker(Context context, AttributeSet attrs) {
        super(context, attrs);
    
        timeFormat = DateFormat.getTimeFormat(getContext());
    
        setInputType(InputType.TYPE_DATETIME_VARIATION_DATE);
        setFocusable(false);
        setNow();
    }
    
    protected void showTimePicker() {
        TimePickerDialog timePickerDialog;
    
        timePickerDialog = new TimePickerDialog(getContext(), this, getHour(),
                getMinute(), true);
        timePickerDialog.show();
    }
    
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN)
            showTimePicker();
    
        return super.onTouchEvent(event);
    }
    
    public java.text.DateFormat getTimeFormat() {
        return timeFormat;
    }
    
    public void setTimeFormat(java.text.DateFormat timeFormat) {
        this.timeFormat = timeFormat;
        updateText();
    }
    
    @Override
    public void onTimeSet(android.widget.TimePicker view, int hour, int minute) {
        // TODO Auto-generated method stub
        setTime(hour, minute);
        clearFocus();
    
        if (onTimeSetListener != null){
            onTimeSetListener.onTimeSet(this, hour, minute);
        }
    
    }
    
    public void updateText() {
        Calendar cal = new GregorianCalendar(0, 0, 0, getHour(), getMinute());
        setText(timeFormat.format(cal.getTime()));
    }
    

    }

    calendar_events.xml

        <?xml version="1.0" encoding="utf-8"?>
        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:background="@color/maroon"
        tools:context="com.gpplsmje.mac.calendar.CalendarEvents" >
    
        <com.gpplsmje.mac.calendar.utils.TimePicker
            android:id="@+id/alarm_time"
            style="@android:style/Widget.Holo.Light.Spinner"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="60"
            android:gravity="center"
            android:textColor="@color/white" />
        </RelativeLayout>
    

    CalendarEvents.java

    public class CalendarEvents extends Activity implements OnClickListener {
        TimePicker notifyTime;
    
    Button back, cancel, done;
    int hour, minute, day, month, year;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.calendar_events);
        onNewIntent(getIntent());
    
        notifyTime = ((TimePicker) findViewById(R.id.alarm_time));
        notifyTime.setTimeFormat(DateFormat.getTimeFormat(this));
    
        hour = notifyTime.getHour();
        minute = notifyTime.getdMinute();
    
        done.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()){
        case R.id.bDone:
            Toast.makeText(this, year + " " + month + " " + day + " " + hour + " " + minute , Toast.LENGTH_LONG).show();
            break;
        }
    }
    

    I made a Toast message to check if what I have selected from the TimePicker is the right thing. But every time I run this code it always gives me the current time on my machine and not the time I selected from the TimePicker. How do I accomplish this? Can any one please help me? Thanks in advance.