2017-09-12 11 views
1

ページ分割でRecyclerViewを作成しようとしていますが、リストの最後にスクロールしようとするとプログレスバーが表示される問題があります。スクロールイベントを処理するためのメソッドonScrolledを持つコールバックRecyclerView.OnScrollListenerがありますが、実際のスクロールが発生していないときは機能していません。RecyclerViewが一番下にonscrolledを呼び出さない

下から下にスクロールしようとすると動作する方法がありますが、私のロジックではジェスチャの方向(上/下)を知る必要があるため、この方法は私の状況では役に立ちません。

私は現在、(明らかに動作していないされている)、このようややそれをやろうとしている:私は最後にonScrolledに到達し、それがちょっと働いていたかどうかを検出しようとしたが、時にはI:

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { 
     @Override 
     public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
      super.onScrolled(recyclerView, dx, dy); 
      fetchDataFromServer(); 
     } 
    }); 

EDITをサーバーからデータを取得しようとしています。何も受け取りません。そのような要求の後もまだリストの終わりです。リストを再度更新するようにスクロールしたいのですが、それ以降はできませんonScrolledが呼び出されていません。

これを修正する方法はありますか?私が使用できる別のコールバックがありますか?

+0

を使用することができますか?もしそうなら、 'RecyclerView.Adapter'が最後のビューにデータをバインドするときに' onBindViewHolder'メソッドで 'fetchDataFromServer()'を呼び出さないようにしてください。 –

+0

私は何をしているのですか、あなたの解決策を試してみます –

答えて

1

recyclerviewの最後に進捗状況が表示されていることを確認するには、終了に達していることを確認するだけです。

これは、それがどのようになるである -

private int visibleThreshold = 1; // trigger just one item before the end 
private int lastVisibleItem, totalItemCount; 

mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { 
      @Override 
      public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
       super.onScrollStateChanged(recyclerView, newState); 
      } 

      @Override 
      public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
       super.onScrolled(recyclerView, dx, dy); 

       totalItemCount = mLayoutManager.getItemCount(); 
       lastVisibleItem = mLayoutManager.findLastVisibleItemPosition(); 

       if (totalItemCount <= (lastVisibleItem + visibleThreshold) { 
        // ... end has been reached... 
        //... do your stuff over here... 
       } 
      } 
     }); 
    } 

編集:私は、サーバーからデータを取得しようとすると、

時々私は 何

を受信しません。

シンプル!ネットワーク要求が失敗した場合は、例外をキャッチしてください。 SocketTimeOutExceptionの場合は、同じリクエストをもう一度やり直してください。。別の例外がある場合(バックエンドまたはフロントエンドからのものかもしれません)、修正してください。

+0

私の質問が更新されました。見てください –

+0

私は解決策を更新しました:) – Wizard

1

あなたが分SDKレベル23向けの開発なら、あなたはあなたのソースコードの抜粋を見て、あなたがいない、RecyclerViewにページネーションを実装しようとしていると思いますsetOnScrollChangeListener

recyclerView.setOnScrollChangeListener(new View.OnScrollChangeListener() { 
     @Override 
     public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { 

     } 
    }); 
+0

ありがとうございます。 19 –

関連する問題