这个问题,其实很简单,就是布局出bug了。
目前有一个需求,要做一个城市选择器,首先便想到了androidPickerView这个库。 以下是这个库的简介
This is a picker view for android , support linkage effect, timepicker and optionspicker.(时间选择器、省市区三级联动)
照着例子写,
其实最麻烦的还是
options1Items、 options2Items、options3Items这三个数据。
一切完毕,setPicker,结果就报错误了。
Binary XML file line #25: Binary XML file line #25: Error inflating class com.contrarywind.view.WheelView
毕竟不是萌新了,一看这个错误大致就知道是怎么回事。
在加载xml文件的时候,找不到或者无法加载WheelView控件。
看Android-PickerView的代码可以知道,确实pickerview_options.xml布局文件在25行处有用到WheelView控件,并且也有依赖到com.contrarywind:wheelview:4.1.0这个库。
在github上查看更新日志,
发现有一种可能,4.1.9会不会没有成功依赖
com.contrarywind:wheelview:4.1.0?不过这个也只是一种可能。
把版本降到4.1.8,结果依赖的wheelview的版本也降到4.0.9,最糟糕的是,问题还没有解决。
在网上重新找答案,发现大家遇到这种情况,是因为自定义控件出错,不是属性就是初始化。有的是属性的值错误,有的是属性id重复,找不到对应的值。
检查了一遍自己的代码,没发现错误。同时也发现了另一个小可爱
不过他的问题已经解决了,而且bug发生的时间还是2018年,看来这个方法有解决方案。
这个时候突发联想,既然pickerview自带的xml布局文件加载wheelView控件出错了,那,如果我为pickerview自定义一个布局呢?
copypickerview_option.xml文件的源码,复制到空xml文件中
上面那张图是github上的例子,不过这个例子应该是老版本的,新版本的returnData()方法不一样了
//抽离接口回调的方法
public void returnData() {
if (mPickerOptions.optionsSelectListener != null) {
int[] optionsCurrentItems = wheelOptions.getCurrentItems();
mPickerOptions.optionsSelectListener.onOptionsSelect(optionsCurrentItems[0], optionsCurrentItems[1], optionsCurrentItems[2], clickView);
}
}
成功了,确实拉起了三级联动的弹窗,并且数据完整。
最后提一点,这个库好用是好用,不过确实已经不更新了,太老了(对比隔壁的ARouter好太多了)。