我在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);
}
}
答案 0 :(得分:1)
一种避免两次调用getNewItems(1)的方法意味着您应该在类上有一个全局变量,例如,名为currentPage的全局变量,该变量初始化为值1,每次调用getNewItems()时都会递增。 >
从现在开始通话
getNewItems(currentPage);
currentPage++;