2016-03-22 56 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