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

Posted YuNansen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

详细报错如下图:

而我的出错代码如下:
自定义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自定义View出现android.view.InflateException的一种解决方法的主要内容,如果未能解决你的问题,请参考以下文章

android 自定义View onMeasure中 super.onMeasure 和 setMeasuredDimension

一起来学习android自定义控件—边缘凹凸的View

Android自定义View--Paint

Android自定义View--Paint

Android技术分享| 自习室自定义View代替通知动画

android progressbar 能自定义显示gif 吗