网站建设公司 经营资质,天津市建设工程管理信息网,自助式网站,网站登录界面模板下载ListView加载数据原理:系统绘制ListView时#xff0c;首先会用getCount#xff08;#xff09;函数得到要绘制的这个列表的长度#xff0c;然后开始逐行绘制。然后调用getView()函数#xff0c;在这个函数里面首先获得一个View#xff08;简单item#xff0c;如字符串或…ListView加载数据原理:系统绘制ListView时首先会用getCount函数得到要绘制的这个列表的长度然后开始逐行绘制。然后调用getView()函数在这个函数里面首先获得一个View简单item如字符串或者单个组件的显示则是View自定义的item包含很多控件的时候是一个ViewGroup然后再实例化并设置各个组件及其数据内容并显示它。如果我们有大量的item要显示怎么办不可能为每个Item创建一个新的View这会消耗大量的内存可能会OOM解决办法就是缓存View然后重复利用。这个图是解释了系统缓存的过程当有前面的Item已经划出屏幕时它的View将被后面的Item复用。 显示不正常问题缓存机制固然很好但在使用时要特别注意。比如前面的Item里面的组件的数据也会被带到将要复用的Item中从而导致显示错误。 Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubHolder holder null;convertView null; //禁用缓存机制if (convertView null) {convertView mInflater.inflate(R.layout.bus_unit, parent, false);holder new Holder();holder.station (TextView) convertView.findViewById(R.id.textView_station); 解决办法最简单的方法就是禁用它的缓存机制这只适用于Item比较少的情况。 对于Item比较多的情况这样的解决办法显然是不合适的。另外一种解决办法其实也挺简单的只要将Item中的组件数据再初始化为原来的状态就行了。 Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubHolder holder null;if (convertView null) {convertView mInflater.inflate(R.layout.bus_unit, parent, false);holder new Holder();holder.station (TextView) convertView.findViewById(R.id.textView_station);holder.stationState (ImageView) convertView.findViewById(R.id.imageView_station_state);convertView.setTag(holder);} else {holder (Holder) convertView.getTag();}//应对缓存机制初始化数据。holder.stationState.setImageResource(R.drawable.presence_offline);holder.station.setText(bean.getBusList().get(position));if (bean.getBusList().get(position).equals(bean.getCurrentPosition())) {String text bean.isDirection() ? 当前位置 : 目标位置;holder.stationState.setImageResource(R.drawable.presence_now);}String station;int index2 bean.getBusList().get(position).indexOf(();if (index2 ! -1) {station bean.getBusList().get(position).substring(0, index2);} else {station bean.getBusList().get(position);}if (bean.getStationList().contains(station)) {if (bean.getStateList().get(index).equals(前往)) {holder.stationState.setImageResource(R.drawable.presence_online);}}return convertView;} 版权声明本文为博主原创文章未经博主允许不得转载。 转载于:https://www.cnblogs.com/AndyDai/p/4734099.html