2016-03-29 13 views
0

私は、RecyclerViewをCursorAdapterに添付し、私自身のカスタムRecyclerView.OnScrollListenerを持っています。ユーザーがトップにスクロールしてプルダウンすると、すべてのアイテムが削除され、ネットワークからフェッチされた新しいアイテムに置き換えられます。RecyclerViewのスクロールを再開する方法

問題は、取得された新しいアイテムの数が画面に収まるのに十分小さい(オーバーフローしない場合)、スクロールするときにアイテムの次のページをロードするために使用するカスタムのonScrollListenerが決して活性化されない。より具体的には、onScrollメソッドは呼び出されません。なぜなら、スクロールが必要なだけのリストには十分なビデオがないからです。私が試したこの問題を回避するには

  1. onScroll方法を有することがRecyclerViewにsmoothScrollBy(0,0)を呼び出すには、私がonLoadFinishedで行われた両方の呼び出しRecyclerView

requestLayout()を呼び出す

  • と呼ばれます私のローダーの新しいデータを持つカーソルを交換した後、古いと。

    アイデア?

  • 答えて

    0

    scrollListenerを削除して、あなたのrecyclerViewの上にカスタムタッチリスナーを含むビューを追加して、そこからさらにデータを取得する必要があるかどうかを確認してください。

    class MyTouchListener implements View.OnTouchListener { 
    
         boolean isFirstRowCompletelyVisible; 
    
         @Override 
         public boolean onTouch(View v, MotionEvent event) { 
          switch (event.getAction()) { 
    
           case MotionEvent.ACTION_DOWN://user put his finger on the screen. 
            isFirstRowCompletelyVisible = ((LinearLayoutManager) mRecyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPosition() == 0; 
            break; 
           case MotionEvent.ACTION_MOVE:// user move his finger on screen. 
            if (isFirstRowCompletelyVisible) { 
            //calculate movement and decide if you want to pull new data from your server. 
            } 
            break; 
           case MotionEvent.ACTION_UP: 
            isFirstRowCompletelyVisible = false; 
            break; 
          } 
          return false; 
         } 
        } 
    
    関連する問題