6

setOnScrollListener に問題があります。リストビューの一番下までスクロールするたびに、asynctask を呼び出し続けます。一番下に到達したときにのみロードするように setOnScrollListener を設定するにはどうすればよいですか。

listview.setAdapter(adapter);
mProgressDialog.dismiss();

listview.setOnScrollListener(new OnScrollListener() {

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) { 
        // TODO Auto-generated method stub
    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        int lastInScreen = firstVisibleItem + visibleItemCount;
        if (lastInScreen == totalItemCount) {
            new loadmore().execute();
        } else {
        }
    }
);
4

1 に答える 1

13

OnScroll メソッドは、リスト ビューを下にスクロールするたびに呼び出されるため、ここで実装されているようなパディングを使用することをお勧めします。

public class EndlessScrollListener implements OnScrollListener 

    private int visibleThreshold = 5;
    private int currentPage = 0;
    private int previousTotal = 0;
    private boolean loading = true;

    public EndlessScrollListener() {
    }
    public EndlessScrollListener(int visibleThreshold) {
        this.visibleThreshold = visibleThreshold;
    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,
            int visibleItemCount, int totalItemCount) {
        if (loading) {
            if (totalItemCount > previousTotal) {
                loading = false;
                previousTotal = totalItemCount;
                currentPage++;
            }
        }
        if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) {
            // I load the next page of gigs using a background task,
            // but you can call any function here.
            new LoadGigsTask().execute(currentPage + 1);
            loading = true;
        }
    }

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

visibleThreshold – さらに読み込む前に、現在のスクロール位置より下にある項目の最小量。

currentPage – ロードしたデータの現在のページ

previousTotal – 最後の読み込み後のデータセット内のアイテムの総数

loading – データの最後のセットが読み込まれるのを待っている場合は true。

于 2013-07-04T15:48:59.777 に答える