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

来源:互联网 发布:mac下思维导图 编辑:程序博客网 时间:2024/05/16 07:00

今天在开发的时候,在使用一个自定义的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) 构造函数即可。这应该是如上报错的一种解决方式,大家可以尝试一下~

1 0