关于if(converView == null){
}
其他
{
}
如果我避免编写其他部分,以及它如何影响我的代码,该怎么办?
我只是想知道它是否可以正常工作。有人可以解释一下convertview的gettag和settag吗???
public View getView(int position, View convertView, ViewGroup parent) {
DeviceViewHolder holder = null;
mSelectedDeviceBin = getItem(position);
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.single_device_view, null);
holder = new DeviceViewHolder();
holder.deviceId = (TextView) convertView
.findViewById(R.id.deviceId);
holder.deviceType = (TextView) convertView
.findViewById(R.id.deviceType);
convertView.setTag(holder);
} else
holder = (DeviceViewHolder) convertView.getTag();
// Populating the views
holder.deviceId.setText(mSelectedDeviceBin.getDeviceBinId());
StringBuilder deviceCount = new StringBuilder();
deviceCount.append("");
double count = mSelectedDeviceBin.getQtyStock();
deviceCount.append(count);
String deviceCountString = deviceCount.toString();
holder.deviceType.setText("Total number of Items:"
+ deviceCountString);
return convertView;
}
最佳答案
该实现使用convertViews和ViewHolder模式,并按以下方式工作。
Android不会为列表中的每个项目增加新的视图,而是仅创建可见的视图。视图离开屏幕后,将被重用。这样,相对较慢的充气呼叫的数量被最小化。
其次,ViewHolder模式可确保视图查找的数量(findViewById())最小化,因为这也相对较慢,尤其是在滚动时。因此,直接引用被保存在内存中并存储在ViewHolder中,而不是每次都找到视图。为了确保正确的ViewHolder对象与正确的项目视图一起存储,可以使用view.setTag()在convertView中设置它们。可以通过使用getTag()调用获得它们。
else是必需的,因为否则viewHolder变量将为null,并且应用程序将崩溃。
为了清楚起见,我建议您编写如下的else:
} else {
holder = (DeviceViewHolder) convertView.getTag();
}
编辑:同样,您可以在if(convertView == null){}语句内移动LayoutInflator的创建。否则不需要。