バックグラウンド
PinterestLikeAdapterView ライブラリを使用して、インターネットからいくつかの画像を表示しています。これは gridView に似ていますが、セルごとに高さが異なります。
問題
このライブラリを使用してインターネットから画像を表示するため、notifyDatasetChanged を呼び出すときにビューが混乱しないようにすることが重要です。
何らかの理由で、この関数を呼び出すと、ビューの位置が異なる getView() メソッドが呼び出されます。たとえば、まったくスクロールせず、notifyDatasetChanged (または ArrayAdapter の場合は addAll) を呼び出しても、位置 0 の場合は位置 8 のビューを取得し、位置 1 の場合は位置のビューを取得します7 など...
これにより、グリッド全体が画像を更新するようになり、UX が台無しになります。
通常、gridView と listView の両方で、更新を克服する方法は、viewHolder 内のビューに使用された位置を配置することであり、それらが等しい場合は、それらがまだ一致していることを意味します。
例えば:
... getView(...)
{
//<=inflate a new view if needed
//avoid refreshing view in case it's still the same position:
if(position==holder.position)
return rootView;
holder.position=position;
//<=update the view according to its data
...
}
ただし、ここでは別のビューを別の順序で再利用するため、このトリックはここでは機能しません。
この問題により、表示されているほとんどすべてのビューが更新されるだけでなく、 DiskCacheLruライブラリを使用しているため、2 つのスレッドを使用して 2 つの同一の inputSteam データを同じキーに入れようとするため、クラッシュします。
質問
私に何ができる?これはライブラリの既知のバグですか?
多分私はリフレッシュを克服するために悪い方法を使用していますか?
今のところ、メモリキャッシュを使用して、少なくとも以前にキャッシュされたアイテムを取得しますが、それは「ワクチン」というよりは「治療」に似ています...