让RecyclerView自动加载第1页

时间:2018-07-24 15:16:04

标签: android android-recyclerview

我在Android项目中使用的是RecyclerView。我有一个函数getPosts(int page),它将新项目添加到相关的ArrayList中。这在onLoadMore()中称为。

现在,当活动开始时,什么也没有发生。因此,我决定从getPosts(1)手动调用onCreate()。现在的问题是页面1被加载两次。在onCreate()中我一次,在onLoadMore()中我又一次。后续页面可以完美加载。

有什么办法告诉RecyclerView开始加载?如果没有,我该怎么办?

编辑:根据要求,以下是我的代码摘要:

private ArrayList<Post> postArrayList;
private RecyclerView recycler;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_diary);

    //...

    postArrayList = new ArrayList<>();

    recycler = ((RecyclerView) findViewById(R.id.recyclerDiary));
    recycler.setHasFixedSize(true);
    recycler.setLayoutManager(new LinearLayoutManager(this));

    EndlessRecyclerViewScrollListener scrollListener = new EndlessRecyclerViewScrollListener(((LinearLayoutManager) recycler.getLayoutManager())){
        @Override
        public void onLoadMore(int page, int totalItemsCount, RecyclerView view) {
            Log.d("devlog", "Requesting page "+page+" from onLoadMore()");
            getPosts(page);
        }
    };

    recycler.setAdapter(new PostAdapter(postArrayList, new RecyclerViewClickHandler()));
    recycler.addOnScrollListener(scrollListener);

    Log.d("devlog", "Requesting page 1 from onCreate()");
    getPosts(1);

}

//...

private void getPosts(int page){

    int insertStartPos = postArrayList.size();
    Post[] posts;
    //get posts from the backend

    for (int i = 0; i < posts.length(); i++){
        postArrayList.add(posts[i]);
    }

    DiaryAdapter adap = ((DiaryAdapter) recycler.getAdapter());
    if (insertStartPos == 0){
        adap.notifyDataSetChanged();
    } else {
        adap.notifyItemRangeInserted(insertStartPos, bundleSize);
    }
}

1 个答案:

答案 0 :(得分:1)

一种避免两次调用getNewItems(1)的方法意味着您应该在类上有一个全局变量,例如,名为currentPage的全局变量,该变量初始化为值1,每次调用getNewItems()时都会递增。 >

从现在开始通话

getNewItems(currentPage);
currentPage++;