在RecyclerView中使用RecyclerView.OnScrollListener来实现加载更多项目得到重复项

时间:2018-06-21 02:40:06

标签: java android android-recyclerview retrofit2

我试图使用Retrofit 2将JSON数据提取到RecyclerView中。我还实现了分页。现在进行测试,我更改了JSON URL,好像每页仅显示5个项目。可以通过在JSON URL的末尾添加“&page = {PAGE#”来更改页码(其中PAGE#是从1开始的整数,如果没有提及页码,则默认显示第一页) )。

问题:我已成功将每个页面添加到Recyclerview中。但是,它会将最后一页项目添加两次,有时又添加了3次。
像这样: 它将添加最后几次帖子 enter image description here

我找不到问题。分步调试没有帮助。请帮我。我正在学习这些,所以如果您能帮助我,我将非常感谢。

WPPOST POJO:

public class WPPost {

  @SerializedName("code")
  @Expose
  private String code;
  @SerializedName("id")
  @Expose
  private Integer id;
  @SerializedName("guid")
  @Expose
  private Guid guid;
  @SerializedName("title")
  @Expose
  private Title title;
  @SerializedName("content")
  @Expose
  private Content content;
  @SerializedName("post_categories")
  @Expose
  private List < String > postCategories = null;

  public Integer getId() {
    return id;
  }

  public void setId(Integer id) {
    this.id = id;
  }

  public Guid getGuid() {
    return guid;
  }

  public void setGuid(Guid guid) {
    this.guid = guid;
  }

  public Title getTitle() {
    return title;
  }

  public void setTitle(Title title) {
    this.title = title;
  }

  public Content getContent() {
    return content;
  }

  public void setContent(Content content) {
    this.content = content;
  }

  public List < String > getPostCategories() {
    return postCategories;
  }

  public void setPostCategories(List < String > postCategories) {
    this.postCategories = postCategories;
  }
  public String getCode() {
    return code;
  }

  public void setCode(String code) {
    this.code = code;
  }
}

型号类:

public class Model {

  public int postid;
  public String title;
  public String content;
  public String categoriesnames;
  public Model(int mID, String mTitle, String mContent, String mCategorynames) {
    this.postid = mID;
    this.title = mTitle;
    this.content = mContent;
    this.categoriesnames = mCategorynames;
  }
}

1 个答案:

答案 0 :(得分:1)

RecyclerView的{​​{1}}方法可能会在短时间内被多次调用,并且您的if语句不能阻止onScrolled在一次滚动中多次被调用,您可以打印带有您的请求URL的日志消息以进行验证。

因此,您应该通过消除多余的重复请求来解决此问题。例如,使用标志检查getRetrofit()请求是否正在处理:

getRetrofit

然后,使用此标志来确定是否应触发下一页请求。