use*_*801 1 android listview listviewitem android-listview convertview
什么是关于if(converView == null){} else {}如果我避免编写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;
}
Run Code Online (Sandbox Code Playgroud)
该实现使用convertViews和ViewHolder模式,并按如下方式工作.
Android不会为列表中的每个项目增加新视图,而只会创建如此多的可见视图.一旦视图离开屏幕,它将被重用.这样,相对较慢的膨胀呼叫的数量被最小化.
其次,ViewHolder模式确保最小化视图查找次数(findViewById()),因为这也相对较慢,尤其是在滚动时.因此,不是每次都查找视图,而是直接引用保存在内存中,并存储在ViewHolder中.要确保使用正确的项目视图存储正确的ViewHolder对象,可以使用view.setTag()在convertView中设置它们.可以使用getTag()调用获取它们.
else是必需的,因为否则viewHolder变量将为null,并且应用程序将崩溃.
为清楚起见,我建议你写下这样的其他内容:
} else {
holder = (DeviceViewHolder) convertView.getTag();
}
Run Code Online (Sandbox Code Playgroud)
编辑:另外,您可以在if(convertView == null){}语句中移动LayoutInflator的创建.否则不需要它.
| 归档时间: |
|
| 查看次数: |
8340 次 |
| 最近记录: |