2017-03-17 124 views
0

我試圖創建一個無限滾動RecyclerView。我正在使用PHP和MySQL。在我的PHP腳本請求中,每次使用RecyclerView時都會觸及2個項目。RecyclerView無限滾動排球

$query = "SELECT * FROM beichten WHERE id BETWEEN ($id+1) AND ($id+2)"; 

Volley能做到這一點嗎?

我創建了一個類,每當RecyclerView到達底部時觸發我的請求類。

private boolean isLastItemDisplaying(RecyclerView recyclerView) { 
     if (recyclerView.getAdapter().getItemCount() != 0) { 
      int lastVisibleItemPosition = ((LinearLayoutManager) recyclerView.getLayoutManager()).findLastCompletelyVisibleItemPosition(); 
      if (lastVisibleItemPosition != RecyclerView.NO_POSITION && lastVisibleItemPosition == recyclerView.getAdapter().getItemCount() - 1){ 
       Toast.makeText(Menue.this, "BOTTOM", Toast.LENGTH_SHORT).show(); 


       requestJsonObject(); 
      } 
     } 
     return false; 
    } 

它的工作原理,但RecyclerView負荷再次,只顯示了兩個新加載的對象。

private void requestJsonObject() { 

     RequestQueue queue = Volley.newRequestQueue(this); 
     StringRequest stringRequest = new StringRequest(Request.Method.POST, getbeichtenphp, new Response.Listener<String>() { 
      @TargetApi(Build.VERSION_CODES.M) 
      @Override 
      public void onResponse(String response) { 
       GsonBuilder builder = new GsonBuilder(); 
       Gson mGson = builder.create(); 
       List<ItemObject> posts = new ArrayList<ItemObject>(); 
       posts = Arrays.asList(mGson.fromJson(response, ItemObject[].class)); 
       adapter = new RecyclerViewAdapter(Menue.this, posts); 
       recyclerView.setAdapter(adapter); 
       progressDialog.dismiss(); 

       recyclerView.setOnScrollChangeListener(new View.OnScrollChangeListener() { 
        @Override 


        public void onScrollChange(View view, int i, int i1, int i2, int i3) { 
         isLastItemDisplaying(recyclerView); 
        } 
       }); 

      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       // 
      } 
     }){ 
      @Override 
      protected Map<String, String> getParams() throws AuthFailureError { 
       Map<String, String> parameters = new HashMap<String, String>(); 

       parameters.put("id", String.valueOf(adapter.getItemCount())); 

       return parameters; 
      } 
     }; 
     queue.add(stringRequest); 
    } 
+0

您正在創建一個新的'Adapter'實例,每次只有當前的響應項目。相反,將這些項目添加到當前'Adapter'中的列表中。 –

回答

0

我以前面對這個問題,而不是id參數傳遞給我的API,我添加了id到我的URL

定義網址這樣

private String getbeichtenphp = "http://your/url/here/?id=" 

然後在volley中將id值傳遞給URL。

//pass the id as a parameter to your requestJsonObject function here 
private void requestJsonObject(int id) { 

     RequestQueue queue = Volley.newRequestQueue(this); 
                      //add your id here 
     StringRequest stringRequest = new StringRequest(Request.Method.POST, getbeichtenphp + id, new Response.Listener<String>() { 

對於最初的呼籲這個功能應該是

requestJsonObject(0) 

通過這樣做,該ID將不斷增加了,最終獲取新的項目2每凌空請求。

還有一件事,你應該使用GET方法作爲你的Request.method,並在php中獲得價值,而不是使用POST方法。

看看這個youtube video,我想你會有更清晰的畫面。