2

リストビューのアダプターのgetViewメソッド
は、位置0で複数回呼び出す ため、このアクティビティをロードする
のに時間がかかり、getViewが呼び出されるたびにImageviewでBitampを設定します

また、リスト ビューの高さを 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です。

パフォーマンスを改善するために使用できる 2 つのテクニックがあります:
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 に答える