• 错误解决:android.view.InflateException: Binary XML file line #11: Error inflating class com.tony.timepicker.TimePicker


    今天在做项目开发时遇到这么一个错误,完整的错误提示信息如下:

    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)。

      

  • 相关阅读:
    【剑指offer】复杂链表的复制
    【剑指offer】数组中只出现一次的数
    【剑指offer】数组在排序数组中出现的次数
    【剑指offer】数组中重复的数字
    【剑指offer】两个链表的第一个公共结点
    【剑指offer】1+….+n,不能使用相关关键字
    【剑指offer】连续子数组的最大和
    JS全国城市三级联动
    ES6语法
    前端es6基础语法
  • 原文地址:https://www.cnblogs.com/TonyChan7/p/3862594.html
Copyright © 2020-2023  润新知