0

ユーザーがリストの最後にいるかどうかを理解するために実装OnScrollListenerしました。次のように、リストに新しいデータを正常に追加できました。

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {

    if (scrollState == SCROLL_STATE_IDLE) {
        if (list.getLastVisiblePosition() >= list.getCount()-1) {
            currentPage++;
            loadMore(currentPage);
            adapter.notifyDataSetChanged();
        }
    }
}

問題はnotifyDataSetChanged、期待どおりに ListView 全体を更新することです。しかし、私のリストにはインターネットから非同期に読み込まれる画像があるため、この更新により画像が再度読み込まれ、これは明らかに望ましくありません。Facebook や Twitter などのアプリケーションは、この種の更新をまったく行わずに、最後に新しいデータをシームレスに添付します。彼らはどのようにそれを行いますか、どうすればこのシームレスな無限スクロールを実現できますか?

リロードを防ぐためにアダプターのメソッドで何かをする必要があると思いますが、getViewまだ理解できませんでした。既知の方法はありますか?

ありがとう!

4

1 に答える 1

0

画像キャッシュを実装したいと思うでしょう。キャッシュに画像を要求し、インターネットから非同期で読み込むか、以前に使用した場合はメモリから読み込む必要があります。キャッシュは で使用する必要がありますgetView

キャッシュを行う最も簡単な方法は、ハッシュマップ (別のスレッドで画像を非同期に取得する場合はおそらく ConcurrentHashMap) を使用することです。キーは URL で、値は表示する画像です。次に、最初にハッシュマップに値があるかどうかを確認し、そうでない場合は画像を取得してハッシュマップにも挿入できます。調べてみると他にもいろいろな方法がありますが、おそらくこれが一番簡単です。

このソリューションは、何を無効にするかを心配する必要がなく、同じイメージを要求するときに複数の呼び出しを行うことを心配する必要がないため、より堅牢です。

于 2013-09-16T13:40:33.583 に答える