私持っている私は時々ではない、それは他の人を取得し、時にはダウンし、それをスクロールすると、最初の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();
}
アクティビティまたはフラグメントにはrecyclerviewがありますか? – Cochi
@Cochiアクティビティ –
Thx、リサイクラビューアダプタを更新する場所にコードを表示できますか? – Cochi