无法将字符串转为整数,自定义ListView适配器相关技术求助
嘿,我之前也碰到过这种“明明没做字符串转整数操作却报这个错”的情况,其实大概率是Adapter的初始化或者数据绑定环节出了隐性问题,给你梳理几个最常见的排查方向和解决办法:
先检查Adapter初始化时的
resource参数是否传错了
你在创建ShowcaseAdapter实例的时候,是不是不小心把**字符串资源ID(比如R.string.xxx)**当成了Item布局的ID(R.layout.xxx_item)传给了构造方法?ArrayAdapter的第二个参数要求是布局资源ID,如果你传了字符串资源的整数ID,系统会尝试把这个ID对应的字符串当成布局来解析,直接就会触发“无法将字符串转为整数”的错误。
举个例子,错误的写法:ShowcaseAdapter adapter = new ShowcaseAdapter(this, R.string.app_name, coinList);正确的应该是:
ShowcaseAdapter adapter = new ShowcaseAdapter(this, R.layout.coin_item_layout, coinList);排查
getView方法中的数据绑定逻辑
虽然你没贴这部分代码,但很多时候这个错误是因为在绑定数据时,误调用了需要整数资源的方法重载。比如给TextView设置文本时,如果你传给setText()的是一个字符串,但不小心触发了setText(int)这个重载(这个方法会把参数当成字符串资源ID去查找),就会出问题。
比如错误写法(假设coin.getPrice()返回的是String类型):// 这里会把字符串当成资源ID来解析,必然报错 priceTv.setText(coin.getPrice());正确的写法应该是明确调用接受字符串的重载:
priceTv.setText(String.valueOf(coin.getPrice())); // 如果coin.getPrice()是数字类型,直接转字符串也可以 priceTv.setText(coin.getPrice().toString());检查Item布局中的资源引用是否有误
有时候布局里的控件属性如果用错了资源类型也会触发类似错误,比如把字符串资源当成颜色、尺寸资源引用,或者反过来。比如android:textColor="@string/red_color"而不是@color/red_color,不过这种情况一般编译阶段就会提示,但也可以检查一下布局文件有没有这类低级错误。
如果以上几点都排查过还是没解决,可以把getView方法的代码和Item布局文件贴出来,我再帮你进一步定位~
内容的提问来源于stack exchange,提问作者Kazhiunea

