欢迎推荐人才赚取三位数以上的佣金,活动规则,只要邀请被推荐人关注公众号进入"面试内推",同时回复他的ID给小A,小A会在被推荐人成功入职后跟你分享佣金。佣金有多少呢?文末有惊喜!下面进入今天的正题。
Android的兼容性问题
做过Android的同学应该都有适配安卓兼容性的问题,今天我们来说一个常见却又经常被忽略的问题。
ListView的兼容性问题
可能很多同学有被ListView坑过的经验,好端端的代码只有在4.0机型上才有奇怪的崩溃问题。做app开发的应该都知道,ListView在4.0及以前的系统上,必须现在 setAdapter 之前 addHeaderView,否则会导致崩,而这问题在4.4之后就不存在了。
UserAdapter adapter = new UserAdapter();listView.setAdapter(adapter);View headerView = View.inflate(this, R.layout.list_header, null);listView.addHeaderView(headerView);
例如这段代码一运行就报崩溃
java.lang.IllegalStateException: Cannot add header view to list
解决办法是在 setAdapter 之前调用 addHeaderView
原因分析
我们可以看看4.0的addHeaderView的代码
public void addHeaderView(View v, Object data, boolean isSelectable) { if (mAdapter != null && !(mAdapter instanceof HeaderViewListAdapter)) { throw new IllegalStateException("...")
而4.4及以后的代码则变成了
public void addHeaderView(View v, Object data, boolean isSelectable) { .... // Wrap the adapter if it wasn't already wrapped. if (mAdapter != null) { if (!(mAdapter instanceof HeaderViewListAdapter)) { wrapHeaderListAdapterInternal();
以后在面试时如果被问到,就知道什么原因啦!不过还是建议不要用ListView,毕竟它在复杂场景下的扩展性相当弱鸡..能用RecyclerView代替的话推荐RecyclerView。
请随意转发下图到微信群或朋友圈,内推成功的同学,小A将与你分享4位数的佣金哦,最低也有1000大洋!