0

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

我在这里找到了这个解决方案

可能会发生在这里?

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();
    }
}
4

2 回答 2

2

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

请参阅有关反射的文档

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

于 2013-02-06T15:09:15.373 回答
1

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

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

希望能帮助到你。

于 2013-07-20T01:17:02.530 回答