2014-02-21 62 views
1

的選擇器我有試圖掩蓋約一年文件日期選擇器。的Android無法掩飾一年場

我搜索了一些方法。我覺得這個方法適合我。

但我沒有實現確定。 = =

我使用 的ShowDialog(0); 命令來調用日期選擇器。

然後更改下面的一些代碼:

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

但我運行的代碼。 Year字段已存在。

是否有任何人知道爲什麼嗎?

我嘗試輸出field.getName(),我只是得到下面

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 

於是我嘗試用mYearPicker取代一年。

但我會得到下面的錯誤消息。

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 

有沒有人知道如何使用方法修復來隱藏年份字段和上層android 2.2版本?

非常感謝。

回答

2

首先嚐試改變

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

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

,如果沒有幫助,請嘗試以下代碼

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 
     } 

對我的作品,希望能爲你工作。

+0

謝謝@alexk。我用你的底部。它工作正常。謝謝〜 – dickfala

+0

嗨alexk,我可以問你嗎?你知道如何聽datepicker onchanged嗎?我的意思是用「showDialog(0);」方法。因爲我總是要設置日期選擇器標題。如果我在onDateSet中寫入,當我點擊添加日期時,標題將顯示。謝謝。 – dickfala

+0

我發現這 http://stackoverflow.com/questions/2051153/android-ondatechangedlistener-how-do-you-set-this 基本上它說你需要在datePicker對象上運行init()。 函數是init(INT年,INT monthOfYear,INT請將dayOfMonth,OnDateChangedListener onDateChangedListener) 希望它可以幫助 – alexk