实现ListView的最佳方法

时间:2015-12-21 11:20:59

标签: android performance listview

我有一个简单的问题。我的方式是实现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;
}

3 个答案:

答案 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