2

列表视图适配器中的getView 方法
在位置 0 多次调用 因此加载此 Activity
并设置 Bitamp 每次在 Imageview 中调用 getView 时都会花费更多时间

我也尝试将列表视图高度设置为 fillparent 但不能解决我的问题

Xml 文件中的 ListView

      <RelativeLayout android:layout_width="match_parent"
                      android:layout_height="wrap_content" >
       <ListView  android:id="@+id/lv_order_list"
                        android:layout_width="match_parent"
                        android:layout_height="fill_parent"
                        android:divider="@android:color/transparent"
                        android:dividerHeight="0dp"
                        android:listSelector="@android:color/transparent" >
                    </ListView> 
   </RelativeLayout>

Listview 中的 getView 方法

@Override
        public View getView(final int position, View convertView,
                ViewGroup parent) {
            myView = convertView;
            System.out.println("get view" + position);
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            myView = inflater.inflate(layoutResourceId, parent, false);

            ImageView img_order = (ImageView) myView
                    .findViewById(R.id.img_order);
            TextView title_of_ink = (TextView) myView
                    .findViewById(R.id.title_of_ink);
             title_of_ink.setText("Text");
            picasso.load("url").noFade().into(img_order);
            return myView;
        }
4

1 回答 1

3

getView在滚动过程中会被多次调用,这就是ListView工作原理。

为了提高性能,您可以使用两种技术:
1)查看回收 - 您做错了

public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.your_layout, null);
    }

    TextView text = (TextView) convertView.findViewById(R.id.text);
    text.setText("Position " + position);

    return convertView;
}

2) 使用 ViewHolder 模式

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;

    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.your_layout, null);

        holder = new ViewHolder();
        holder.text = (TextView) convertView.findViewById(R.id.text);

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

    holder.text.setText("Position " + position);

    return convertView;
}

private static class ViewHolder {
    public TextView text;
}

3)异步加载大写 P 的图像,您缺少Context参数

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView); 

lucasr.org借来的代码。

于 2014-07-05T17:29:07.733 回答