0

私のアプリケーション(twitterの種類のアプリ)に(リモートサーバーからの)画像の遅延読み込みを実装しました。フェッチ部分と正確なimageViewへの画像の読み込みは完全に正常に機能します。ただし、アダプタの「getView」部分は、ListViewを下にスクロールした後にのみ呼び出されるため、画像は、下にスクロールした後にのみリモートサーバーからフェッチされます(アダプタの「getView」コード内でasyntaskを実行して画像をフェッチします)。ロードされる画像にかなりの遅延が見られます。画像がロードされてメモリキャッシュに保存されると、上下にスクロールしても問題はありません。唯一の問題は、初めての画像の読み込みが遅いことです

それで、下にスクロールするまでに画像のビットマップを取得し、下にスクロールするとビットマップを設定できるように修正する方法はありますか。プロフィール写真の読み込みに遅れが見られないツイッターアプリのようにしたいと思います。

TIA

4

3 に答える 3

0

あなたのアプローチは間違っています。リストをスクロールするたびに get view として表示する前にすべての画像を取得する必要があるため、サービスが呼び出されて no を取得するたびに。リストが画面に表示できる画像の数 (一度に 4 ~ 5 など)。

あなたがしなければならないことは次のとおりです:- 1) すべての画像を取得します。2) すべての画像を取得してアダプターを listview に設定すると、既に画像をダウンロードしているため、遅延なくリストにすべての画像が表示されます。

しかし、これは遅延読み込みではありません。遅延読み込みとは、ユーザーがスクロールしないと一度に画像の一部しか表示されないことを意味し、サービスから画像をダウンロードしても意味がありません。

役立つことを願っています

于 2012-12-04T06:26:43.207 に答える
0

getView() メソッドで Web サービスを呼び出すと、上下にスクロールするたびに呼び出されます。画面に表示されている行に対して getView メソッドが呼び出されるためです。

あなたができることは、HashMap<int, Object>リストビューの int == 位置で、オブジェクトが画像である に画像をロードすることです。getview では、位置 + (1 -> 10) がロードされているかどうかを確認できます。ロードされていない場合は、何らかのバックグラウンド タスクで Web サービスからそれらを取得します。ハッシュマップに画像をロードし、getView() メソッドでそれらの画像を使用するようにします。Web サービスから直接取得した画像ではありません。そうしないと、それらが取得されるまで待つ必要があります。また、この方法では、上下にスクロールするときに同じ画像を繰り返し取得する代わりに、ハッシュマップに画像をキャッシュします。

もちろん、そのようなアダプターを作成した人はすでにいます。ここで検索するだけで、CommonsWareエンドレス アダプターに関する回答が含まれているこのSO の質問が見つかりました。

于 2012-12-04T07:07:17.623 に答える
0

リスト ビューの遅延読み込みを支援するために使用できる AALP というライブラリがあります。https://bitbucket.org/zedvoid/aalp/src これにより、時間と労力を節約できます。

于 2012-12-04T16:47:35.870 に答える