ListView与图像滞后,使用Volley NetworkImageView / Aquery / View持有者/回收视图

时间:2013-09-19 19:19:47

标签: android performance listview networkimageview

在加载异步图像之前,我已经完成了大量的ListView。但这个是滞后的

我在日志中得到了这个,然后它给出了一个小的延迟

09-19 21:13:32.980: I/endeffect(23824): AbsListView.onMeasure(), getWidth()=1080, getHeight()=561, this=android.widget.ListView{43c94550 VFED.VC. ......ID 0,120-1080,681 #7f0501c1 app:id/sliding_drawer_lv}

以下是代码:

public View getView(int position, View convertView, ViewGroup parent) {
    final ViewHolder mViewHolder;
    long ts = System.currentTimeMillis();
    if(convertView==null){
        convertView = inflater.inflate(R.layout.list_item_routes_search, null);

        mViewHolder = new ViewHolder();
        mViewHolder.pictureNIV = (NetworkImageView)convertView.findViewById(R.id.my_fav_route_image_iv);
        mViewHolder.pictureNIV.setVisibility(View.GONE);

        mViewHolder.titleTv=(TextView)convertView.findViewById(R.id.my_fav_route_item_title_tv);
        mViewHolder.eventTv=(TextView)convertView.findViewById(R.id.my_fav_route_item_event_tv);
        mViewHolder.createdTv=(TextView)convertView.findViewById(R.id.my_fav_route_item_created_tv);
        mViewHolder.createdTv=(TextView)convertView.findViewById(R.id.my_fav_route_item_created_tv);
        App.setFont('m', mViewHolder.titleTv,mViewHolder.eventTv);
        App.setFont('l', mViewHolder.createdTv);

        mViewHolder.extraViewLL= (LinearLayout) convertView.findViewById(R.id.my_fav_route_item_extra_ll);
        mViewHolder.contentViewLL = (LinearLayout) convertView.findViewById(R.id.my_fav_route_item_content_ll);
        mViewHolder.closeBtn = (Button) convertView.findViewById(R.id.my_fav_route_item_close_btn);
        mViewHolder.favoriteTb = (ToggleButton)convertView.findViewById(R.id.my_fav_route_item_extra_fav_tb);
        mViewHolder.shareBtn = (Button)convertView.findViewById(R.id.my_fav_route_item_extra_share_btn);
        mViewHolder.rlp = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);

        convertView.setTag(mViewHolder);
    }
    else{
        mViewHolder = (ViewHolder) convertView.getTag();
    }

然后我用Volleys NetworkImageView设置图像,但我也尝试了延迟的Aq:

mViewHolder.pictureNIV.setImageUrl(getItem(position).images.getImageNormal(),App.mVolleyImageLoader);

1 个答案:

答案 0 :(得分:0)

ListView的高度设置为wrap_parent。这显然使自己的观点付出了代价。