1

画像を非同期ListViewにロードする があります。ImageViewこれを達成するために、私はAndroid-Universal-Image-Loaderを使用しています

しかし、リストビューに表示されている場合にのみ、この画像の読み込みを開始したいと思います。たとえば、リストビューの表示項目が 5 から 9 の場合、それらのみをロードする必要があります。また、ユーザーが非常に速くスクロールする場合はListView、停止したときにのみそれらのアイテムをロードする必要があります。これに対する最善の方法は何ですか?

4

2 に答える 2

4

リストビュー アダプターで「ビューの再利用」を使用する場合は、何もしないでください。UILがあなたのためにそれを行います。UIL はすべてのスクロールされた画像をロードするのではなく、タスク プールにあるものだけをロードします (設定でプール サイズを設定できます)。「ビューの再利用」を使用すると、高速にスクロールされた画像は読み込まれません。GitHub のサンプル プロジェクトを調べてください。

UPD: 1.7.0 バージョンの UIL にはPauseOnScrollListener.

boolean pauseOnScroll = true;
boolean pauseOnFling = true;
listView.setOnScrollListener(new PauseOnScrollListener(pauseOnScroll, pauseOnFling));
于 2012-11-03T08:50:16.393 に答える
1

OnScrollListenerを使用します。このonScrollStateChanged()メソッドは、ListView が(遅いスクロール) と(速いスクロール)の間SCROLL_STATE_IDLEで切り替わったときに呼び出されます。これにより、状態が「アイドル」または「タッチ」の場合にのみ、新しい画像をロードすることを選択できます。SCROLL_STATE_TOUCH_SCROLLSCROLL_STATE_FLING


添加

最初の実行では、ListView の表示項目は表示されません。たとえば、ListView に 4 つの項目が表示されている場合、アプリの起動時に、それらの 4 つの画像を読み込む必要があります。

私自身は Universal Image Loader を使用したことはありませんが、以下で説明したことから、ダウンロードを開始する前に表示される行を知る必要があります。これを試して:

  • Runnable を記述して、非同期ダウンロードを開始します。
  • 行が描画された、 ListView の組み込み Handler を使用して Runnable を呼び出します

例えば:

private Runnable loadImages = new Runnable() {
    @Override
    public void run() {
        // Start the asynchronous downloads
    }
};

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    mListView.post(loadImages);
}

ListView が描画されたloadImagesに呼び出されるため、表示されている行の数が正確にわかります。

于 2012-11-02T23:10:25.393 に答える