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

Android: AutoCompleteTextView show all when no text entered and Show/Hide in Onclick


It looks like editable AutoCompleteTextView  with toggling option and it shows all options when no data is entered.

Here is CustomAutoCompleteTextView.Java

package com.example.myfirstapp;

import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.AutoCompleteTextView;

public class CustomAutoCompleteTextView extends AutoCompleteTextView {

    private Boolean _isDropDownShowing;
    public Boolean get_isDropDownShowing() {
        return _isDropDownShowing;
    }

    public void set_isDropDownShowing(Boolean _isDropDownShowing) {
        this._isDropDownShowing = _isDropDownShowing;
    }

    public CustomAutoCompleteTextView(Context context) {
        super(context);
    }

    public CustomAutoCompleteTextView(Context arg0, AttributeSet arg1) {
        super(arg0, arg1);
    }

     public CustomAutoCompleteTextView(Context arg0, AttributeSet arg1, int arg2) {
            super(arg0, arg1, arg2);
        }
   
    @Override
    public boolean enoughToFilter() {
        // TODO Auto-generated method stub
        return true;
    }

    @Override
    protected void onFocusChanged(boolean focused, int direction,
            Rect previouslyFocusedRect) {
        super.onFocusChanged(focused, direction, previouslyFocusedRect);
        if (focused) {
            performFiltering(getText(), 0);
           
        }
    }
   
    }




Here is the code to utilize the above CustomAutoCompleteTextView control in my Activity.
List<String> listOfStrings = new ArrayList<String>();
        listOfStrings.add("Apple");
        listOfStrings.add("Ball");
        listOfStrings.add("Cat");
   
        final CustomAutoCompleteTextView actv = new CustomAutoCompleteTextView(this);
        actv.set_isDropDownShowing(false);
        actv.setOnClickListener(new View.OnClickListener() {
           
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if(actv.get_isDropDownShowing())
                {
                    actv.dismissDropDown();
                    actv.set_isDropDownShowing(false);
                }
                else
                {
                    actv.showDropDown();
                    actv.set_isDropDownShowing(true);
                }
            }
        });
        ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,    listOfStrings);
        dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        actv.setAdapter(dataAdapter);
        linearLayout.addView(new EditText(context));
        linearLayout.addView(actv);
    }