What is the all about if(converView==null) {}还{}如果我避免编写其他部分以及它如何影响我的代码怎么办?我只是想知道它是否可以在没有其他部分的情况下正常工作.有人可以解释一下转换视图的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() 的转换视图中设置。它们可以通过使用 getTag() 调用来获取。
else 是必需的,否则 viewHolder 变量将为 null,并且应用程序将崩溃。
为了清楚起见,我建议你这样写其他的:
} else {
holder = (DeviceViewHolder) convertView.getTag();
}
编辑:此外,您可以将 LayoutInflator 的创建移动到 if(convertView == null){} 语句中。否则不需要它。