dickfala
dickfala

Reputation: 3306

Android can't hide picker of year field

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.

Upvotes: 1

Views: 563

Answers (1)

alexk
alexk

Reputation: 213

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.

Upvotes: 2

Related Questions