Monday, 28 October 2013

Android: Time Picker using Fragments


Here is the code of TimePickerFragment.Java

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Dialog;
import android.app.DialogFragment;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.text.format.DateFormat;
import android.widget.TimePicker;

public class TimePickerFragment extends DialogFragment implements
        TimePickerDialog.OnTimeSetListener {

    OnTimeSelectedListener tListener;
    static TimePickerFragment newInstance(String time) {
        TimePickerFragment t = new TimePickerFragment();

        // Supply num input as an argument.
        Bundle args = new Bundle();
        args.putString("time", time);
        t.setArguments(args);
        return t;
    }

    @SuppressLint("SimpleDateFormat")
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        SimpleDateFormat formatter;
        String dTime;
        dTime = getArguments().getString("time");
        formatter = new SimpleDateFormat("hh:mm");
        if (dTime.equalsIgnoreCase("null") || dTime.equalsIgnoreCase("")) {
            Calendar cal = Calendar.getInstance();
            dTime = formatter.format(cal.getTime());
        }

        Date date = null;
        try {
            date = (Date) formatter.parse(dTime);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return new TimePickerDialog(getActivity(), this, date.getHours(),
                date.getMinutes(), DateFormat.is24HourFormat(getActivity()));
    }

    @Override
    public void onAttach(Activity activity) {
        // TODO Auto-generated method stub
        super.onAttach(activity);
        try {
            tListener = (OnTimeSelectedListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnTimeSelectedListener");
        }

    }

    public interface OnTimeSelectedListener {
        public void onTimeSelected(String selectedTime);
    }

    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        // Add leading zeros if required
        String hours = (String) ((hourOfDay < 10) ? "0" + hourOfDay : Integer
                .toString(hourOfDay));
        String minutes = (String) ((minute < 10) ? "0" + minute : Integer
                .toString(minute));
        String time = hours + ":" + minutes;
        tListener.onTimeSelected(time);

    }
}

Here is the code to utilize the TimePickerFragment in the Activity.

 EditText fieldTime  = new EditText(this);
                          fieldTime.setFocusable(false);
                          fieldTime.setOnClickListener(new OnClickListener() {
                              @Override
                                public void onClick(View v) {
                                  ShowTime(v);
                            }});

public void ShowTime(View view)
    {
        CurrentFragmentControlid=    view.getId();
        String time= ((EditText)view).getText().toString();
        TimePickerFragment timeFragment = TimePickerFragment.newInstance(time);
        FragmentManager manager=getFragmentManager();
        timeFragment.show(manager, "timePicker");
    }


    @Override
    public void onTimeSelected(String selectedTime) {
        EditText editText=(EditText) this.findViewById(CurrentFragmentControlid);
        editText.setText(selectedTime);
    }

1 comment: