Today in the project development encountered such a mistake, the complete error message is as follows:
Java.lang.RuntimeException:Unable to start Activity componentinfo{com.tony.timepicker/ Com.tony.timepicker.MainActivity}: Android.view.InflateException:Binary XML file line #11: Error inflating class Com.tony.timepicker.TimePicker
The Com.tony.timepicker.TimePicker class is a custom view class with the following contents:
PackageCom.tony.timepicker;ImportJava.util.Calendar;ImportAndroid.content.Context;ImportAndroid.text.format.DateFormat;ImportAndroid.util.AttributeSet;Importandroid.widget.FrameLayout;ImportAndroid.widget.NumberPicker;ImportAndroid.widget.NumberPicker.OnValueChangeListener; Public classTimepickerextendsFramelayout {PrivateNumberpicker Mhourspinner; PrivateNumberpicker Mminutespinner; PrivateCalendar mdate; Private intMhour, Mminute; Privatestring[] Mdatedisplayvalues =NewString[7]; PrivateOntimechangedlistener Montimechangedlistener; PublicTimepicker (Context context) {Super(context); Init (context); } Public voidinit (Context context) {Mdate=calendar.getinstance (); //Android.widget.TimePickerMhour =Mdate.get (Calendar.hour_of_day); Mminute=Mdate.get (Calendar.minute); Inflate (context, R.layout.time_picker, This); Updatetimecontrol (); Mhourspinner= (Numberpicker) This. Findviewbyid (R.id.np_hour); Mhourspinner.setmaxvalue (23); Mhourspinner.setminvalue (0); Mhourspinner.setvalue (Mhour); Mhourspinner.setonvaluechangedlistener (Monhourchangedlistener); Mminutespinner= (Numberpicker) This. Findviewbyid (R.id.np_minute); Mminutespinner.setmaxvalue (59); Mminutespinner.setminvalue (0); Mminutespinner.setvalue (Mminute); Mminutespinner.setonvaluechangedlistener (Monminutechangedlistener); } PrivateNumberpicker.onvaluechangelistener Mondatechangedlistener =NewOnvaluechangelistener () {@Override Public voidOnvaluechange (Numberpicker picker,intOldval,intnewval) {Mdate.add (calendar.day_of_month, newval-oldval); Updatetimecontrol (); Ontimechanged (); } }; PrivateNumberpicker.onvaluechangelistener Monhourchangedlistener =NewOnvaluechangelistener () {@Override Public voidOnvaluechange (Numberpicker picker,intOldval,intnewval) {Mhour=Mhourspinner.getvalue (); Ontimechanged (); } }; PrivateNumberpicker.onvaluechangelistener Monminutechangedlistener =NewOnvaluechangelistener () {@Override Public voidOnvaluechange (Numberpicker picker,intOldval,intnewval) {Mminute=Mminutespinner.getvalue (); Ontimechanged (); } }; Private voidUpdatetimecontrol () {Calendar cal=calendar.getinstance (); Cal.settimeinmillis (Mdate.gettimeinmillis ()); Cal.add (Calendar.day_of_year,-7/2-1); for(inti = 0; I < 7; ++i) {cal.add (calendar.day_of_year,1); Mdatedisplayvalues[i]= (String) dateformat.format ("Mm.dd eeee", Cal); } } Public InterfaceOntimechangedlistener {voidOntimechanged (Timepicker view,intYearintMonthintDay ,intHourintminute); } Public voidSetontimechangedlistener (Ontimechangedlistener callback) {Montimechangedlistener=callback; } Private voidontimechanged () {if(Montimechangedlistener! =NULL) {montimechangedlistener.ontimechanged ( This, Mdate.get (calendar.year), Mdate.get (Calendar.month), Mdate.get (calendar.day_of _month), Mhour, Mminute); } }}
After searching the internet for related problems, find the cause of the problem:
Because the Com.tony.timepicker.TimePicker class does not define two additional constructors Timepicker (context context, AttributeSet attrs) and Timepicker (context Context, AttributeSet attrs, int defstyle) caused the error.
Workaround:
Define Constructors Timepicker (context context, AttributeSet attrs) and Timepicker (context context, AttributeSet attrs, int defstyle).