Binary XML file line #25: Binary XML file line #25: xxx

250 阅读2分钟

这个问题,其实很简单,就是布局出bug了。

目前有一个需求,要做一个城市选择器,首先便想到了androidPickerView这个库。 以下是这个库的简介

This is a picker view for android , support linkage effect, timepicker and optionspicker.(时间选择器、省市区三级联动)

照着例子写,

image.png 其实最麻烦的还是 options1Itemsoptions2Itemsoptions3Items这三个数据。 一切完毕,setPicker,结果就报错误了。

Binary XML file line #25: Binary XML file line #25: Error inflating class com.contrarywind.view.WheelView

毕竟不是萌新了,一看这个错误大致就知道是怎么回事。

在加载xml文件的时候,找不到或者无法加载WheelView控件。

image.png

看Android-PickerView的代码可以知道,确实pickerview_options.xml布局文件在25行处有用到WheelView控件,并且也有依赖到com.contrarywind:wheelview:4.1.0这个库。

在github上查看更新日志,

image.png 发现有一种可能,4.1.9会不会没有成功依赖com.contrarywind:wheelview:4.1.0?不过这个也只是一种可能。

把版本降到4.1.8,结果依赖的wheelview的版本也降到4.0.9,最糟糕的是,问题还没有解决。

在网上重新找答案,发现大家遇到这种情况,是因为自定义控件出错,不是属性就是初始化。有的是属性的值错误,有的是属性id重复,找不到对应的值。

检查了一遍自己的代码,没发现错误。同时也发现了另一个小可爱

image.png

不过他的问题已经解决了,而且bug发生的时间还是2018年,看来这个方法有解决方案。

这个时候突发联想,既然pickerview自带的xml布局文件加载wheelView控件出错了,那,如果我为pickerview自定义一个布局呢?

copypickerview_option.xml文件的源码,复制到空xml文件中

image.png

image.png

上面那张图是github上的例子,不过这个例子应该是老版本的,新版本的returnData()方法不一样了

//抽离接口回调的方法
public void returnData() {
    if (mPickerOptions.optionsSelectListener != null) {
        int[] optionsCurrentItems = wheelOptions.getCurrentItems();
        mPickerOptions.optionsSelectListener.onOptionsSelect(optionsCurrentItems[0], optionsCurrentItems[1], optionsCurrentItems[2], clickView);
    }
}

成功了,确实拉起了三级联动的弹窗,并且数据完整。

最后提一点,这个库好用是好用,不过确实已经不更新了,太老了(对比隔壁的ARouter好太多了)。