if(converView==null) { } 别的 { } 如果我避免编写其他部分以及它如何影响我的代码怎么办? 我只是想知道没有 else 部分它是否工作正常。有人可以解释一下 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 不会为列表中的每个项目创建一个新 View ,而是只创建可见的 View 。一旦 View 离开屏幕,它将被重新使用。这样,相对较慢的 inflate 调用的数量就被最小化了。
其次,ViewHolder 模式确保 View 查找 (findViewById()) 的数量最小化,因为这也相对较慢,尤其是在滚动时。因此,不是每次都查找 View ,而是将直接引用保存在内存中,并存储在 ViewHolder 中。为了确保正确的 ViewHolder 对象与正确的项目 View 一起存储,它们在 convertView 中使用 view.setTag() 进行设置。它们可以通过使用 getTag() 调用获得。
else 是必需的,否则 viewHolder 变量将为 null,应用程序将崩溃。
为了清楚起见,我建议您像这样编写 else:
} else {
holder = (DeviceViewHolder) convertView.getTag();
}
编辑:另外,您可以将 LayoutInflator 的创建移动到 if(convertView == null){} 语句中。否则不需要。
关于android - 在 android 列表适配器中,如果 convertView 为 null 而不是 null 怎么办?任何人都可以解释下面的 getView 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19543617/