我有一个简单的问题。我的方式是实现listView的最佳方式?我的列表有大约80个项目,所以性能很重要。我知道使用ViewHolder对性能有好处,但我是以真实的方式做到的吗?我的代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (inflater == null)
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = inflater.inflate(R.layout.event_list, null, false);
holder = new ViewHolder();
holder.title = (TextView) convertView.findViewById(R.id.textView2);
holder.date = (TextView) convertView.findViewById(R.id.textView4);
holder.location = (TextView) convertView.findViewById(R.id.textView3);
holder.image = (NetworkImageView) convertView.findViewById(R.id.networkImageView);
convertView.setTag(holder);
} else
holder = (ViewHolder) convertView.getTag();
holder.title.setText(eventList.get(position).getTitle());
holder.date.setText(eventList.get(position).getDate());
holder.location.setText(eventList.get(position).getLocation());
if (imageLoader == null)
imageLoader = ImageCacheManager.getInstance().getImageLoader();
holder.image.setImageUrl(Constants.ImagesUrl + eventList.get(position).getIconFileName(), imageLoader);
return convertView;
}
private class ViewHolder {
public TextView title;
public TextView date;
public TextView location;
public NetworkImageView image;
}
答案 0 :(得分:1)
自API 21起,Android recyclerview实现了改进性能列表,具有比ListView更好的性能。
显示:RecyclerView
编辑:
建议,使用Picasso Lib加载异步图像
显示:Picasso
答案 1 :(得分:0)
您可以修改此行
convertView = inflater.inflate(R.layout.event_list, null, false);
到
convertView = LayoutInflater.from(context).inflate(R.layout.event_list, null, false);
并且不能删除此行
if (inflater == null)
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
来自getView()
。
答案 2 :(得分:0)
正如@PPartisian所提到的,recyclerView可以被视为更好的选择。
但是在你的情况下(80个对象),一个简单的listview会做,因为大多数Android手机有足够的内存来加载80个对象。
列表视图和recyclerView之间会有交易,甚至是其他优化方法。每个都有自己的优点和缺点。
您可以参考this。