【问题标题】:Hide day from datepicker从日期选择器中隐藏日期
【发布时间】:2013-02-06 14:48:15
【问题描述】:

我需要从日期选择器中隐藏日期字段,我找到了这种方法,但问题出在 Android 2.3.3 版本中,工作正常,但在 android 4x 版本中没有隐藏日期字段。我猜是图书馆“java.lang.reflect.Field”已经过时了,但我不确定。

我找到了这个解决方案here

这里可能会发生什么?

final DatePicker datePicker = new DatePicker(this);                                     
                LLayout.addView(datePicker);

                hideDayField(datePicker, "mDayPicker");


    private void hideDayField(DatePicker datePicker, String name) {
    try {
        java.lang.reflect.Field field = DatePicker.class.getDeclaredField(name);
        field.setAccessible(true);
        View fieldInstance = (View) field.get(datePicker);
        fieldInstance.setVisibility(View.GONE);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

【问题讨论】:

    标签: android


    【解决方案1】:

    您采用的这种方法使用反射来处理DatePicker-class 的一些隐藏字段。这样做的问题是,当类的内部结构发生变化时(例如,您要更改的字段的名称),这将不再起作用。

    the Docs on Reflection

    在您的链接问题中,提供了一些其他选项,可能更适合。

    【讨论】:

      【解决方案2】:

      我做了类似的隐藏日期和月份的事情,找到了解决方案here

      try {
          java.lang.reflect.Field[] f = picker.getClass().getDeclaredFields();
          for (java.lang.reflect.Field field : f) {
              if (field.getName().equals("mDayPicker") || field.getName().equals("mDaySpinner")
                 || field.getName().equals("mMonthPicker") || field.getName().equals("mMonthSpinner")) {
                 field.setAccessible(true);
                 Object dmPicker = new Object();
                 dmPicker = field.get(picker);
                 ((View) dmPicker).setVisibility(View.GONE);
              }
          }
      }
      

      希望对你有帮助。

      【讨论】:

      • 这给了我一个 NullPointer 异常。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多