Question

It is my XML file named create_event.xml

  <!--  Start Date  -->
          <LinearLayout
            style="@style/create_event_exc_margin_bottom"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <TextView
                style="@style/create_event_exc_infotext_bold"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/start_date" />
            </LinearLayout>

             <LinearLayout
                 style="@style/create_event_exc_margin_bottom"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:orientation="horizontal" >
                <EditText 
                    style="@style/create_event_infotext_normal"
                    android:textColor="@android:color/black"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content" 
                     android:layout_weight="1"
                     android:background="@drawable/extra_desc"
                     android:id="@+id/start_date">
                </EditText>

                <Button 
                    android:layout_height="wrap_content"
                    android:layout_weight="0" 
                    android:id="@+id/btn_start_calender"
                    android:text="Calendar"
                    android:layout_width="100dp">
                </Button> 

             </LinearLayout>

        <!--  Start Time  -->      
               <LinearLayout
            style="@style/create_event_exc_margin_bottom"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <TextView
                style="@style/create_event_exc_infotext_bold"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/start_time" />
            </LinearLayout>

             <LinearLayout
                 style="@style/create_event_exc_margin_bottom"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:orientation="horizontal" >

                 <EditText 
                     style="@style/create_event_infotext_normal"
                    android:textColor="@android:color/black"
                     android:layout_width="wrap_content"
                android:layout_height="wrap_content" 
                android:layout_weight="1"
                android:background="@drawable/extra_desc"
            android:id="@+id/start_time">

        </EditText>

    <Button 
        android:layout_height="wrap_content"
        android:layout_weight="0" 
        android:id="@+id/btn_start_timepicker"
        android:text="Time Picker" 
        android:layout_width="100dp"></Button>

                 </LinearLayout>

              <!--  End Date  --> 
               <LinearLayout
            style="@style/create_event_exc_margin_bottom"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <TextView
                style="@style/create_event_exc_infotext_bold"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/end_date" />
            </LinearLayout>

             <LinearLayout
                 style="@style/create_event_exc_margin_bottom"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:orientation="horizontal" >

                 <EditText 
                     style="@style/create_event_infotext_normal"
                    android:textColor="@android:color/black"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content" 
                     android:layout_weight="1"
                     android:background="@drawable/extra_desc"
                     android:id="@+id/end_date">
                </EditText>
                <Button 
                    android:layout_height="wrap_content"
                    android:layout_weight="0" 
                    android:id="@+id/btn_end_calender" 
                    android:text="Calendar"
                    android:layout_width="100dp">
                </Button> 
             </LinearLayout>

              <!--  End Time  --> 
                <LinearLayout
            style="@style/create_event_exc_margin_bottom"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <TextView
                style="@style/create_event_exc_infotext_bold"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/end_time" />
            </LinearLayout>

             <LinearLayout
                 style="@style/create_event_exc_margin_bottom"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:orientation="horizontal" >

                 <EditText 
                     style="@style/create_event_infotext_normal"
                    android:textColor="@android:color/black"
                     android:layout_width="wrap_content"
                android:layout_height="wrap_content" 
                android:layout_weight="1"
                android:background="@drawable/extra_desc"
            android:id="@+id/end_time">

        </EditText>

    <Button 
        android:layout_height="wrap_content"
        android:layout_weight="0" 
        android:id="@+id/btn_end_timepicker"
        android:text="Time Picker" 
        android:layout_width="100dp"></Button>

                 </LinearLayout>

Here, it is my java file

public class Create_Event extends SherlockFragment implements OnClickListener {

Button b_start_calender, b_end_calender, b_start_timepicker, b_end_timepicker;
EditText start_date, start_time, end_date, end_time;
private int start_year, start_month, start_day, start_hour, start_minute;
private int end_year, end_month, end_day, end_hour, end_minute;

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

b_start_calender=(Button)rootView.findViewById(R.id.btn_start_calender);
    b_start_timepicker=(Button)rootView.findViewById(R.id.btn_start_timepicker);
    b_end_calender=(Button)rootView.findViewById(R.id.btn_end_calender);
    b_end_timepicker=(Button)rootView.findViewById(R.id.btn_end_timepicker);

    start_date=(EditText)rootView.findViewById(R.id.start_date);
    start_time=(EditText)rootView.findViewById(R.id.start_time);
    end_date=(EditText)rootView.findViewById(R.id.end_date);
    end_time=(EditText)rootView.findViewById(R.id.end_time);

    b_start_calender.setOnClickListener(this);
    b_start_timepicker.setOnClickListener(this);
    b_end_calender.setOnClickListener(this);
    b_end_timepicker.setOnClickListener(this);

return rootView;        
}


@Override
public void onClick(View v) {
    // TODO Auto-generated method stub


if(v==b_start_calender) {
    final Calendar c=Calendar.getInstance();
    start_year=c.get(Calendar.YEAR);
    start_month=c.get(Calendar.MONTH);
    start_day=c.get(Calendar.DAY_OF_MONTH);

    DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {

        public void onDateSet(DatePicker view, int year,
                int monthOfYear, int dayOfMonth) {
startDate = Calendar.getInstance();
            startDate.set(Calendar.YEAR, year);
            startDate.set(Calendar.MONTH, monthOfYear);
            startDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
           start_date.setText(dayOfMonth + "-"
                    + (monthOfYear + 1) + "-" + year);
        }
    };
    DatePickerDialog d = new DatePickerDialog(getActivity(),
             mDateSetListener, start_year, start_month, start_day);
    d.show();
}  

if(v==b_start_timepicker) {
    final Calendar c = Calendar.getInstance();
    start_hour=c.get(Calendar.HOUR_OF_DAY);
    start_minute=c.get(Calendar.MINUTE);

    TimePickerDialog.OnTimeSetListener mTimeSetListner = new TimePickerDialog.OnTimeSetListener() {

        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            start_time.setText(hourOfDay + ":" + minute);
        }
    };
    TimePickerDialog t=new TimePickerDialog(getActivity(), mTimeSetListner, start_hour, start_minute,false);
    t.show();
}

if(v==b_end_calender) {
    final Calendar c=Calendar.getInstance();
    end_year=c.get(Calendar.YEAR);
    end_month=c.get(Calendar.MONTH);
    end_day=c.get(Calendar.DAY_OF_MONTH);

    DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener()  {
        public void onDateSet(DatePicker view, int year,
                int monthOfYear, int dayOfMonth)  {
Calendar newEndDate=Calendar.getInstance();
            newEndDate.set(Calendar.YEAR, year);
            newEndDate.set(Calendar.MONTH, monthOfYear);
            newEndDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);



            if(newEndDate.before(startDate))
            {
                end_date.setText("Plz.. enter date after starting date..");

            }

            else
            {

                end_date.setText(dayOfMonth + "-"
                        + (monthOfYear + 1) + "-" + year);

            }


        }
    };
    DatePickerDialog d = new DatePickerDialog(getActivity(),
             mDateSetListener, end_year, end_month, end_day);
    d.show();       
}  


if(v==b_end_timepicker) {
    final Calendar c = Calendar.getInstance();
    end_hour=c.get(Calendar.HOUR_OF_DAY);
    end_minute=c.get(Calendar.MINUTE);

    TimePickerDialog.OnTimeSetListener mTimeSetListner = new TimePickerDialog.OnTimeSetListener()  {

        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            end_time.setText(hourOfDay + ":" + minute);
        }
    };
    TimePickerDialog t=new TimePickerDialog(getActivity(), mTimeSetListner, end_hour, end_minute,false);
    t.show();
}
}

Here, start date and end date can be set properly. End date can not be set before starting date. But, if we set ending date first and then starting date... In this case it is not working properly. How to handle this case??? I also need that starting and ending date can't be same and user can not be able select date before today's date... Where to put condition?? How can I do this?? Please Help...

Was it helpful?

Solution

I would change your end date listener to the following.

if(v==b_end_calender) {
    final Calendar c=Calendar.getInstance();
    end_year=c.get(Calendar.YEAR);
    end_month=c.get(Calendar.MONTH);
    end_day=c.get(Calendar.DAY_OF_MONTH);

    DatePickerDialog.OnDateSetListener mDateSetListener 
        = new DatePickerDialog.OnDateSetListener() {
            public void onDateSet(DatePicker view, 
                int year, int monthOfYear, int dayOfMonth) {
                Calendar newEndDate = Calendar.getInstance();
                newEndDate.set(Calendar.YEAR, year);
                newEndDate.set(Calendar.MONTH, monthOfYear);
                newEndDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);

                if(newEndDate.before(startDate)) {
                    // handle the error
                } else {
                end_date.setText(dayOfMonth + "-" + (monthOfYear + 1) + "-" + year);
                }

            }
    };

    new DatePickerDialog(getActivity(),
         mDateSetListener, end_year, end_month, end_day).show();

}

If you notice, I'm using a global variable startDate. You're going to need to store that globally when it is selected.

Calendar startDate = Calendar.getInstance(); // global variable

if(v==b_start_calender) {
    final Calendar c=Calendar.getInstance();
    start_year=c.get(Calendar.YEAR);
    start_month=c.get(Calendar.MONTH);
    start_day=c.get(Calendar.DAY_OF_MONTH);

    DatePickerDialog.OnDateSetListener mDateSetListener 
        = new DatePickerDialog.OnDateSetListener() {
            public void onDateSet(DatePicker view, 
                int year, int monthOfYear, int dayOfMonth) {
                    startDate.set(Calendar.YEAR, year);
                    startDate.set(Calendar.MONTH, monthOfYear);
                    startDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                    start_date.setText(dayOfMonth + "-" + (monthOfYear + 1) + "-" + year);
        }
    };

    new DatePickerDialog(getActivity(),
         mDateSetListener, start_year, start_month, start_day).show();
}  

Secondly, look into the DateFormatter classes, I'm sure they would be of use to you.

Cheers.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top