关于接口的动态实现
//反射获取NumberPicker类的内部接口类
Class numberPicker_OnChangedListener=Class.forName("android.widget.NumberPicker$OnChangedListener");
//反射获取NumberPicker方法set接口事件的方法
Method setOnChangeListenerMethod =numberPicker.getMethod("setOnChangeListener", numberPicker_OnChangedListener);
final Field datePicker_mYear=DatePicker.class.getDeclaredField("mYear");
datePicker_mYear.setAccessible(true);
final Method datePicker_adjustMaxDay=DatePicker.class.getDeclaredMethod("adjustMaxDay");
final Method datePicker_notifyDateChanged=DatePicker.class.getDeclaredMethod("notifyDateChanged");
final Method datePicker_updateDaySpinner=DatePicker.class.getDeclaredMethod("updateDaySpinner");
datePicker_adjustMaxDay.setAccessible(true);
datePicker_notifyDateChanged.setAccessible(true);
datePicker_updateDaySpinner.setAccessible(true);
//调用反射获取的set接口事件的方法,但是这边会有问题的new OnChangedListener()是我写的自己接口,我想强转
//成为NumberPicker类的内部接口类 有什么方法吗,NumberPicker这个类是手机自带的代码,和我引入的代码jar包 //无关,有什么方法能动态创建numberPicker_OnChangedListener的一个实现类吗
setOnChangeListenerMethod.invoke(fatherDatePicker, new OnChangedListener(){
@Override
public void onChanged(Object picker, int oldVal, int newVal)
{
// TODO Auto-generated method stub
if(newVal<Calendar.getInstance().get(Calendar.YEAR)){
try
{
// Adjust max day for leap years if needed
// fatherDatePicker.adjustMaxDay();
// fatherDatePicker.notifyDateChanged();
// fatherDatePicker.updateDaySpinner();
datePicker_mYear.set(fatherDatePicker, newVal);
datePicker_adjustMaxDay.invoke(fatherDatePicker);
datePicker_notifyDateChanged.invoke(fatherDatePicker);
datePicker_updateDaySpinner.invoke(fatherDatePicker);
}
catch (IllegalArgumentException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IllegalAccessException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (InvocationTargetException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
} );