1

私は少し混乱しています:原則として、ある種のリストビュー(AndroidまたはiOS、または別のプラットフォームの要約)に画像を非同期でロードする場合、基本的にこれを行う必要があります..

-- make a note of "which" cell this is (say, #213)
-- start getting the image from the net.
-- it has loaded from the net. What cell are we now?
-- if we are "still" 213, load the image to the image view!
-- if we are "no longer" 213, just forget about it.

これは、非同期イメージの遅延読み込みの基本です。たとえば、Lucas Rocha は次の有名な記事でそれを完全に説明しています。

http://lucasr.org/2012/04/05/performance-tips-for-androids-listview/

(正確に「これは、あなたがそれを行うことができる1つの方法の単純なスケッチです:」までスクロールします...)

さて、私が理解しているように、ピカソは実際にこれを完全に自動的に行います。

ビューが変更されたかどうかは、Picasso 自身が「認識」しています。ビューが変更された場合、Picasso はわざわざそれをロードしないことを知っています。

私は完全に正しいですか?これは Picasso の組み込み機能であり、他に何もする必要はありませんか?

(余談ですが、ピカソがこれを「どのように」行うのか少し混乱しています。ちらっと見ても、ピカソにIDやホルダーの何かを記録する魔法のコードが見当たりませんか?ビュー?問題。)


明確にするために、私は基本的に getView の最後に、このように通常の方法で Picasso を使用しています...

Picasso.
  with(State.mainContext).
  load(imageFile.getUrl()).
  placeholder(R.drawable.default).
  noFade().
  into(v.hexaIV);
4

1 に答える 1

4

はい、Picassoそれは美しいですか。getView() メソッド内のその 1 行だけが必要ですPicasso.with(c).load(url).into(img);

彼らが正確にどのようにそれを行うのかはわかりませんが、Picasso存在する前に独自の画像ローダーを作成しましたが、それほど難しくありません.

画像ローダー コードのどこかに Url と ImageView のマップがあるとします。

したがって、コードが渡されるたびに、imgこのマップをチェックし、img基本的な Java を使用して同じ URL を既にロードmImg.equals(img)している場合、一致する場合は、その URL をキャッシュしても、Drawable を配信しないことを認識します。イメージビューに。

まれに、ロードを直接キャンセルしたい場合があり、そのような場合は を呼び出すことができますがPicasso.with(c).cancel(img);、それが必要になることはめったにありません。

于 2014-09-09T13:59:43.090 に答える