標籤:android style blog java color io
今天在做項目開發時遇到這麼一個錯誤,完整的錯誤提示資訊如下:
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
com.tony.timepicker.TimePicker類為一個自訂View類,內容如下:
package com.tony.timepicker;import java.util.Calendar;import android.content.Context;import android.text.format.DateFormat;import android.util.AttributeSet;import android.widget.FrameLayout;import android.widget.NumberPicker;import android.widget.NumberPicker.OnValueChangeListener;public class TimePicker extends FrameLayout { private NumberPicker mHourSpinner; private NumberPicker mMinuteSpinner; private Calendar mDate; private int mHour, mMinute; private String[] mDateDisplayValues = new String[7]; private OnTimeChangedListener mOnTimeChangedListener; public TimePicker(Context context) { super(context); init(context); } public void init(Context context) { mDate = Calendar.getInstance(); // android.widget.TimePicker mHour = 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); } private NumberPicker.OnValueChangeListener mOnDateChangedListener = new OnValueChangeListener() { @Override public void onValueChange(NumberPicker picker, int oldVal, int newVal) { mDate.add(Calendar.DAY_OF_MONTH, newVal - oldVal); updateTimeControl(); onTimeChanged(); } }; private NumberPicker.OnValueChangeListener mOnHourChangedListener = new OnValueChangeListener() { @Override public void onValueChange(NumberPicker picker, int oldVal, int newVal) { mHour = mHourSpinner.getValue(); onTimeChanged(); } }; private NumberPicker.OnValueChangeListener mOnMinuteChangedListener = new OnValueChangeListener() { @Override public void onValueChange(NumberPicker picker, int oldVal, int newVal) { mMinute = mMinuteSpinner.getValue(); onTimeChanged(); } }; private void updateTimeControl() { Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(mDate.getTimeInMillis()); cal.add(Calendar.DAY_OF_YEAR, -7 / 2 - 1); for (int i = 0; i < 7; ++i) { cal.add(Calendar.DAY_OF_YEAR, 1); mDateDisplayValues[i] = (String) DateFormat.format("MM.dd EEEE", cal); } } public interface OnTimeChangedListener { void onTimeChanged(TimePicker view, int year, int month, int day, int hour, int minute); } public void setOnTimeChangedListener(OnTimeChangedListener callback) { mOnTimeChangedListener = callback; } private void onTimeChanged() { if (mOnTimeChangedListener != null) { mOnTimeChangedListener.onTimeChanged(this, mDate.get(Calendar.YEAR), mDate.get(Calendar.MONTH), mDate.get(Calendar.DAY_OF_MONTH), mHour, mMinute); } }}
經過在網上尋找相關問題,找到問題的原因:
因為com.tony.timepicker.TimePicker類沒有定義另外兩個建構函式TimePicker(Context context, AttributeSet attrs)和TimePicker(Context context, AttributeSet attrs, int defStyle)導致的錯誤。
解決辦法:
定義建構函式TimePicker(Context context, AttributeSet attrs)和TimePicker(Context context, AttributeSet attrs, int defStyle)。