2017-03-05 12 views
0

私持っている私は時々ではない、それは他の人を取得し、時にはダウンし、それをスクロールすると、最初の10の項目を取得しますrecyclerview:recyclerviewは時々、スクロール上のデータを取得し、時にはない

item 22 
item 21 
item 20 
item 19 
item 18 
item 17 
item 16 
item 15 
item 14 
item 13 
usually it stops at item 13. (not getting the onscroll items) 

を時にはそれが動作してもらいますその他(12,11,10,9,8,7,6,5,4,3,2,1 ...)

私のスクロールコード:

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

は、データを取得する:

private void getData() { 
     requestQueue.add(getDataFromServer(requestCount, user_id)); 
    } 

函サーバー

private JsonArrayRequest getDataFromServer(String requestCount, String user_id) { 
    //Initializing ProgressBar 
    final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar1); 

    //Displaying Progressbar 
    progressBar.setVisibility(View.VISIBLE); 

    requestCount = requestCount + "&user=" + user_id; 

    //JsonArrayRequest of volley 
    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Config.DATA_URL + String.valueOf(requestCount), 
      new Response.Listener<JSONArray>() { 
       @Override 
       public void onResponse(JSONArray response) { 
        //Calling method parseData to parse the json response 
        parseData(response); 
        //Hiding the progressbar 
        progressBar.setVisibility(View.GONE); 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        progressBar.setVisibility(View.GONE); 
        //If an error occurs that means end of the list has reached 
        Toast.makeText(UserAreaActivity.this, "No More Items Available", Toast.LENGTH_SHORT).show(); 
       } 
      }); 

    //Returning the request 
    return jsonArrayRequest; 
} 

チェック最後の項目

//This method would check that the recyclerview scroll has reached the bottom or not 
    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) 
       return true; 
     } 
     return false; 
    } 

任意のアイデアそれは時々、なぜない作品、なぜ?

---------------------------->編集

public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> { 

    //Imageloader to load image 
    private ImageLoader imageLoader; 
    private final Context context; 

    //List to store all posts 
    List<Posts> Posts; 


    //Constructor of this class 
    public CardAdapter(List<Posts> Post, Context context){ 
     super(); 
     //Getting all 
     this.Posts = Post; 
     this.context = context; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View v = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.posts_list, parent, false); 
     ViewHolder viewHolder = new ViewHolder(v); 
     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 

     Posts post = Posts.get(position); 
     holder.post = post; 

     //Loading image from url 
     //imageLoader = CustomVolleyRequest.getInstance(context).getImageLoader(); 

     //Showing data on the views 
     //holder.imageView.setImageUrl(post.getImageUrl(), imageLoader); 


     Picasso.with(context).load(post.getImageUrl()).into(holder.imageView); 


     holder.textViewName.setText(post.getName()); 
     holder.textViewPublisher.setText(post.getPublisher()); 

     holder.setIsRecyclable(false); 

    } 

    @Override 
    public int getItemCount() { 
     return Posts.size(); 
    } 

    class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ 
     //Views 
     public ImageView imageView; 
     public TextView textViewName; 
     public TextView textViewPublisher; 
     public Posts post; 

     public ImageView ProfilePic; 

     //Initializing Views 
     public ViewHolder(View itemView) { 
      super(itemView); 
      imageView = (ImageView) itemView.findViewById(R.id.imageViewHero); 
      textViewName = (TextView) itemView.findViewById(R.id.textViewName); 
      textViewPublisher = (TextView) itemView.findViewById(R.id.textViewPublisher); 

     } 
     @Override 
     public void onClick(View v) { 

       //... 

      } 

     } 

    } 
} 

--------- --------------------------------編集2

private JsonArrayRequest getDataFromServer(String requestCount, String user_id) { 
    //Initializing ProgressBar 
    final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar1); 

    //Displaying Progressbar 
    progressBar.setVisibility(View.VISIBLE); 

    requestCount = requestCount + "&user=" + user_id; 

    //JsonArrayRequest of volley 
    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Config.DATA_URL + String.valueOf(requestCount), 
      new Response.Listener<JSONArray>() { 
       @Override 
       public void onResponse(JSONArray response) { 
        //Calling method parseData to parse the json response 
        parseData(response); 
        //Hiding the progressbar 
        progressBar.setVisibility(View.GONE); 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        progressBar.setVisibility(View.GONE); 
        //If an error occurs that means end of the list has reached 
        Toast.makeText(UserAreaActivity.this, "No More Items Available", Toast.LENGTH_SHORT).show(); 
       } 
      }); 

    //Returning the request 
    return jsonArrayRequest; 
} 

//This method will get data from the web api 
private void getData() { 
    //Adding the method to the queue by calling the method getDataFromServer 
    requestQueue.add(getDataFromServer(requestCount, user_id)); 
    //Incrementing the request counter 
    //requestCount++; 
} 

//This method will parse json data 
private void parseData(JSONArray array) { 
    for (int i = 0; i < array.length(); i++) { 
     //Creating the object 
     Posts PostObj = new Posts(); 
     JSONObject json = null; 
     try { 
      //Getting json 
      json = array.getJSONObject(i); 

      //Adding data to the object 
      PostObj.setImageUrl(json.getString(Config.TAG_IMAGE_URL)); 
      PostObj.setName(json.getString(Config.TAG_NAME)); 
      PostObj.setPublisher(json.getString(Config.TAG_PUBLISHER)); 

      requestCount = PostObj.setId(json.getString(Config.TAG_ID)); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     //Adding object to the list 
     listPosts.add(PostObj); 
    } 

    //Notifying the adapter that data has been added or changed 
    adapter.notifyDataSetChanged(); 
} 
+1

アクティビティまたはフラグメントにはrecyclerviewがありますか? – Cochi

+0

@Cochiアクティビティ –

+1

Thx、リサイクラビューアダプタを更新する場所にコードを表示できますか? – Cochi

答えて

1

試してみましたか? :

private boolean isLastItemDisplaying(RecyclerView recyclerView) { 
      if (recyclerView.getAdapter().getItemCount() != 0) { 
      // instead of findLastCompletelyVisibleItemPosition 
       int lastVisibleItemPosition = ((LinearLayoutManager) recyclerView.getLayoutManager()).findLastVisibleItemPosition(); 
       if (lastVisibleItemPosition != RecyclerView.NO_POSITION && lastVisibleItemPosition == recyclerView.getAdapter().getItemCount() - 1) 
        return true; 
      } 
      return false; 
     } 
+0

私は今それを試してみるよ、ありがとう! –

+0

ああ、それは働いています。私のページネーションは間違っていますが、私は最後の投稿IDを取得するために調整する必要があると思います。 –

+1

グレート:) この回答があなたの質問を解決した場合は、チェックマークをクリックして受け入れることを検討してください。これはあなたが解決策を見つけたことをコミュニティに示します。これを行う義務はありません。 – Cochi

関連する問題