2016-03-22 55 views
1

我正在使用RecyclerView並從API中以10批爲單位獲取對象。對於分頁,我用EndlessRecyclerOnScrollListener並按照本教程Endless RecyclerView.

無盡的RecyclerView - ProgressBar只在慢速滾動時才消失

我的問題:在滾動PROGRAMM必須添加進度條和從服務器獲取數據後,將其刪除。但在我的情況下,它不起作用。 ProgressBar仍在下載。如果滾動速度慢,它就會失去活力。如果滾動更快進度欄不會消失。

Endless RecyclerView

該讀取的數據

private void makeJsonObjectRequest(int startList,int endList,final JsonObjectListener listener) { 
      JsonArrayRequest movieReq = new JsonArrayRequest(url, 
        new Response.Listener<JSONArray>() { 
         @Override 
         public void onResponse(JSONArray response) { 
          Log.d(TAG, response.toString()); 
          i = startLsit; 
          while(i < endList) { 
           try { 
            JSONObject obj = response.getJSONObject(i); 
            Movie movie = new Movie(); 

            /***** TONS OF CODE *****/ 

             movieList.add(movie); 
            } 

            } 
           } catch (JSONException e) { 
            e.printStackTrace(); 

           } 
           i++; 
           lastNumber = i; 
          } 
          mAdapter.notifyDataSetChanged(); 
          listener.onDone(lastNumber); 
         } 
        }, new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        VolleyLog.d(TAG, "Error: " + error.getMessage()); 

       } 
      }); 
      AppController.getInstance().addToRequestQueue(movieReq); 

     } 

我在片段使用方法上面的方法:

makeJsonObjectRequest(0, 9, new JsonObjectListener() { 
         @Override 
         public void onDone(int lastNumberI) { 
          lastNumber = lastNumberI; 
         } 

         @Override 
         public void onError(String error) { 

         } 
        }); } 

    mAdapter = new RVAdapter(getContext(),movieList,this,mRecyclerView); 
     mAdapter.setClickListener(this); 
     mRecyclerView.setAdapter(mAdapter); 

     mAdapter.setOnLoadMoreListener(new OnLoadMoreListener() { 
      @Override 
      public void onLoadMore() { 
       movieList.add(null); 
       mAdapter.notifyItemInserted(movieList.size()-1); 
       handler.postDelayed(new Runnable() { 
        @Override 
        public void run() { 
         // remove progress item 
         movieList.remove(movieList.size()-1); 
         mAdapter.notifyItemRemoved(movieList.size()); 
         //add items one by one 
         int start = lastNumber; 
         int end = start + 9; 
         makeJsonObjectRequest(start, end, new JsonObjectListener() { 
          @Override 
          public void onDone(int lastNumberI) { 
           lastNumber = lastNumberI; 
          } 

          @Override 
          public void onError(String error) { 

          } 
         }); 
         mAdapter.setLoaded(); 
        } 
       }, 2000); 
      } 
     }); 

我的適配器這樣Endless RecyclerView

我注意到,當我快速滾動下面的代碼重複

mAdapter.setOnLoadMoreListener(new OnLoadMoreListener() { 
      @Override 
      public void onLoadMore() { 
       movieList.add(null); 
       mAdapter.notifyItemInserted(movieList.size()-1); 
       handler.postDelayed(new Runnable() { 
        @Override 
        public void run() { 
         // remove progress item 
         movieList.remove(movieList.size()-1); 
         mAdapter.notifyItemRemoved(movieList.size()); 
         //add items one by one 
         int start = lastNumber; 
         int end = start + 9; 
         makeJsonObjectRequest(start, end, new JsonObjectListener() { 
          @Override 
          public void onDone(int lastNumberI) { 
           lastNumber = lastNumberI; 
          } 

          @Override 
          public void onError(String error) { 

          } 
         }); 
         mAdapter.setLoaded(); 
        } 
       }, 2000); 
      } 
     }); 
+0

其中是你的progressDilog在這段代碼中? –

+0

你可以發佈'handler.postDelayed(...,...)'的整個代碼嗎? – xdevs23

+0

@AmitRanjan你可以在這個鏈接看到它http://android-pratap.blogspot.com/2015/06/endless-recyclerview-with-progress-bar.html –

回答

0

將其移到可運行的外部。否則它只會在兩秒後被刪除(或者根本不會)

mAdapter.setOnLoadMoreListener(new OnLoadMoreListener() { 
     @Override 
     public void onLoadMore() { 
      movieList.add(null); 
      mAdapter.notifyItemInserted(movieList.size()-1); 
      // remove progress item 
      movieList.remove(movieList.size()-1); 
      mAdapter.notifyItemRemoved(movieList.size()); 
      handler.postDelayed(new Runnable() { 
       @Override 
       public void run() { 

        //add items one by one 
        int start = lastNumber; 
        int end = start + 9; 
        makeJsonObjectRequest(start, end, new JsonObjectListener() { 
         @Override 
         public void onDone(int lastNumberI) { 
          lastNumber = lastNumberI; 
         } 

         @Override 
         public void onError(String error) { 

         } 
        }); 
        mAdapter.setLoaded(); 
       } 
      }, 2000); 
     } 
    }); 
+0

如果我實現了這一點,它的進度條將不可見。 –

+0

嗯...爲什麼不在循環視圖之外創建progressview?您可以將其添加到根視圖並在需要時更改可見性。一定要把它帶到前面。 ('.bringToFront()') – xdevs23