Android自定义View出现android.view.InflateException的一种解决方法

今天在开发的时候,在使用一个自定义的ViewPager的时候,程序出现了如下的错误:

android.view.InflateException: Binary XML file line #16: Binary XML file line #16: Error inflating class com.android.app.view.DispatchViewPager

详细报错如下图:
Android自定义View出现android.view.InflateException的一种解决方法_第1张图片

而我的出错代码如下:
自定义ViewPager:

public class DispatchViewPager extends ViewPager{
    public DispatchViewPager(Context context){
        super(context);
    }

    private DispatchTouch dispatchTouch;

    public interface DispatchTouch{
        void dispatch(MotionEvent ev);
    }

    public void setDispatchTouch(DispatchTouch d){
        dispatchTouch = d;
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if(dispatchTouch != null){
            dispatchTouch.dispatch(ev);
        }
        return super.dispatchTouchEvent(ev);
    }
}

xml中的引用:

<com.android.app.view.DispatchViewPager
   android:id="@+id/viewPager"
   android:layout_width="match_parent"
   android:layout_height="match_parent" />

上面的代码就会报这样的bug:Error inflating class com.android.app.view.DispatchViewPager,后来经过尝试,发现了这个bug的解决方法:在自己的自定义View中加入如下代码:

public DispatchViewPager(Context context,AttributeSet paramAttributeSet) {
        super(context,paramAttributeSet);
    }

也就是带AttributeSet属性的构造函数。
完整自定义代码如下代码如下:

public class DispatchViewPager extends ViewPager{
    public DispatchViewPager(Context context){
        super(context);
    }

    public DispatchViewPager(Context context,AttributeSet paramAttributeSet) {
        super(context,paramAttributeSet);
    }

    private DispatchTouch dispatchTouch;

    public interface DispatchTouch{
        void dispatch(MotionEvent ev);
    }

    public void setDispatchTouch(DispatchTouch d){
        dispatchTouch = d;
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if(dispatchTouch != null){
            dispatchTouch.dispatch(ev);
        }
        return super.dispatchTouchEvent(ev);
    }
}

总结:在出现了如上的bug之后,我们需要在自定义VIew中添加DispatchViewPager(Context context,AttributeSet paramAttributeSet) 构造函数即可。这应该是如上报错的一种解决方式,大家可以尝试一下~

你可能感兴趣的:(Android)