我需要从datepicker中隐藏day字段,我发现了这个方法,但问题出在Android 2.3.3的版本中,工作正常,但在android的版本4x中没有隐藏day字段。我猜是库“ 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();
}
}
答案 0 :(得分:2)
你正在采用的方法使用反射来混淆DatePicker
- 类的一些隐藏字段。这个问题是,当一个类的内部发生变化时(例如你正在改变的字段的名称),这将不再起作用。
在您的关联问题中,提供了一些其他选项,可能更适合。
答案 1 :(得分:1)
我做了类似隐藏日期和月份的事情,找到了解决方案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);
}
}
}
希望它有所帮助。