1

I had try to hide date picker about year file.

I search some method. I feel the method is suitable for me.

But I was not implement ok. = =

I use showDialog(0); command to call date picker.

Then changed some code below:

protected Dialog onCreateDialog(int id) {
            switch (id) {
            case 0:

                dlg =new DatePickerDialog(this, dsl, mYear, mMonth, mDay);
                try
                {
                    Field f[] = dlg.getClass().getDeclaredFields();
                    for( Field field :f)
                    {
                        Log.e("info", "f:"+field.getName());
                            if( field.getName().equals("mYearPicker"))
                            {
                                field.setAccessible(true);
                                Object yearPicker = new Object();
                                yearPicker = field.get(dlg);
                                ((View) yearPicker).setVisibility(View.GONE);


                            }
                }
                dlg.setTitle(SystemData.DATEPICKER_TITLE);
                dlg.setButton(DatePickerDialog.BUTTON_POSITIVE,     SystemData.DATEPICKER_SUBMIT, dlg);


            }
           catch(SecurityException e)
            {
                        Log.d("info", e.getMessage() );
            }
            catch(IllegalArgumentException e)
            {
                    Log.e("info", e.getMessage());
            }
            catch(IllegalAccessException e)
            {
                    Log.e("info", e.getMessage());
            }

            return dlg;

        default:
            break;
        }
    return null;
}

But I run the code. The Year field is exist.

Have any one know why?

I try to output field.getName(), I just get below

    02-21 14:28:21.245: E/info(32085): f:DAY
    02-21 14:28:21.245: E/info(32085): f:MONTH
    02-21 14:28:21.245: E/info(32085): f:YEAR
    02-21 14:28:21.245: E/info(32085): f:mCallBack
    02-21 14:28:21.245: E/info(32085): f:mDatePicker

So I try to replace YEAR with mYearPicker .

But I will get error message below.

    02-21 14:30:59.909: E/AndroidRuntime(32523): FATAL EXCEPTION: main
    02-21 14:30:59.909: E/AndroidRuntime(32523): java.lang.ClassCastException:         java.lang.String cannot be cast to android.view.View

Have any one know how to use the method fix to hide the year field and upper android 2.2 version ?

thank you very much.

dickfala
  • 3,246
  • 3
  • 31
  • 52

1 Answers1

2

First try changing

if( field.getName().equals("mYearPicker"))

to

if (field.getName().equals("mYearPicker")) || field.getName().equals("mYearSpinner")))

if that doesn't help, try the following code

try {
            Field[] datePickerDialogFields = dlg.getClass().getDeclaredFields();
            for (Field datePickerDialogField : datePickerDialogFields) {
                if (datePickerDialogField.getName().equals("mDatePicker")) {
                    datePickerDialogField.setAccessible(true);
                    DatePicker datePicker = (DatePicker) datePickerDialogField
                            .get(dlg);

                    Field datePickerFields[] = datePickerDialogField.getType()
                            .getDeclaredFields();
                    for (Field datePickerField : datePickerFields) {
                        if ("mYearPicker".equals(datePickerField.getName())
                                || "mYearSpinner".equals(datePickerField
                                        .getName())) {
                            datePickerField.setAccessible(true);
                            Object yearPicker = new Object();
                            yearPicker = datePickerField.get(datePicker);
                            ((View) yearPicker).setVisibility(View.GONE);
                        }
                    }
                }
            }
        } catch (Exception e) {
            // TODO: handle exception
        }

Works for me, hopefully will work for you.

alexk
  • 213
  • 1
  • 10
  • Thank you , @alexk. I used your bottom. It's work ok . Thank you~ – dickfala Feb 21 '14 at 07:55
  • Hi alexk, May I ask you? Do you know how to listen the datepicker onchanged? I meaning used "showDialog(0);" method. Because I want always set datepicker title. If I write in onDateSet, when I click add day, the title will show. thanks. – dickfala Feb 21 '14 at 08:57
  • i found this http://stackoverflow.com/questions/2051153/android-ondatechangedlistener-how-do-you-set-this Basically it says you need to run init() on the datePicker object. The function is init(int year, int monthOfYear, int dayOfMonth, OnDateChangedListener onDateChangedListener) Hope it helps – alexk Feb 21 '14 at 09:06
  • if i wasn't clear enough, you need to implement the OnDateChangedListener onDateChangedListener variable – alexk Feb 21 '14 at 09:18