6

グリッド ビューにスワイプ リフレッシュ レイアウトを実装しました。リフレッシュを呼び出すために下に引っ張る (スクロールする) と、完全に機能します。

ただし、ユーザーが上にスクロールしたときに更新する方法を見つけようとしています。したがって、ユーザーがグリッド内の最後の項目 (私の制限は 10) に達したとき、ユーザーが 10 個すべてを表示してから上に引っ張るか、スクロールを続けようとすると、どうすれば更新できますか?

どんな助けでも大歓迎です。

4

4 に答える 4

5

そのため、人々は、a: この質問に対する答えを知らないか、b: 知識を共有したがらないかのいずれかです。

とにかく、久しぶりに私は自分の解決策を思いつきました。スクロール リスナーをグリッドに追加し、画面の一番下までスクロールしたときに計算しました。この時点で、スワイプから onRefresh() メソッドを呼び出して更新します...

編集 してさらに情報を追加

そのため、ユーザーがグリッド ビューの一番下に到達したタイミングを計算するためにいくつかの調査を行った後、このような質問や他の質問に従ってそれを取得しました。以下は、ネイティブの更新機能で動作するように変更する必要があった私のコードです。私の変更は、絶え間ないリフレッシュを防ぐことでした。そのため、if ステートメントには現在更新されていないというチェックが含まれているため、一番下に到達すると更新されましたが、そのチェックがなかったため、常に更新されていました。次に、グリッド内のアイテムの合計量に対してチェックを行う必要がありました。ユーザーが最後のアイテム (最後のアイテム) に到達したとき、アプリも更新され続け、サイクルを中断するものは何もなかったからです。うまくいけば、これはいくつかの助けになります...

        worldBeersGrid.setOnScrollListener(new AbsListView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(AbsListView absListView, int i) {

        }
        @Override
        public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

            int position = firstVisibleItem+visibleItemCount;
            int limit = totalItemCount;
            int totalItems = sharedpreferences.getInt("WORLD ITEM COUNT", 0);

            Log.i("TOTAL WORLD ITEMS", String.valueOf(totalItems));
            Log.i("LIMIT :::::::::::: ", String.valueOf(limit));
            Log.i("POSITION ::::::::::::", String.valueOf(position));
            Log.i("REFRESHING :::::::::::::::", String.valueOf(swipeRefreshLayout.isRefreshing()));

            if(position>=limit && totalItemCount>0 && !swipeRefreshLayout.isRefreshing() && position <totalItems){
                swipeRefreshLayout.setRefreshing(true);
                //In the below method I made my call to my ws...
                onRefresh();
            }
        }
    });
于 2014-08-13T15:46:32.370 に答える
3

あなたはこのようにしてみてください

listView.setOnScrollListener(new OnScrollListener() {

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

@Override
public void onScroll(AbsListView view, int firstVisibleItem,
        int visibleItemCount, int totalItemCount) {
    boolean enable = false;
    if(listView != null && listView.getChildCount() > 0){
        // check if the first item of the list is visible
        boolean firstItemVisible = listView.getFirstVisiblePosition() == 0;
        // check if the top of the first item is visible
        boolean topOfFirstItemVisible = listView.getChildAt(0).getTop() == 0;
        // enabling or disabling the refresh layout
        enable = firstItemVisible && topOfFirstItemVisible;
    }
    swipeRefreshLayout.setEnabled(enable);
}});
于 2014-09-30T10:43:24.917 に答える