gpt4 book ai didi

java - 使用 Parse 和 RecyclerView 进行分页

转载 作者:太空宇宙 更新时间:2023-11-04 12:07:48 25 4
gpt4 key购买 nike

我一直在尝试查看其他各种问题以寻求帮助,但我似乎无法找到解决方案。

我正在使用的OnScrollListener:https://gist.github.com/ssinss/e06f12ef66c51252563e


rvHome.addOnScrollListener(新MainRecyclerViewScrollListener(线性布局管理器){
@覆盖
公共(public)无效onLoadMore(int页面){
获取帖子(页面);
}
});



public void fetchOfflinePosts() {
OfflineListPosts = db.getAllPosts();

对于(帖子:offlineListPosts){
listPosts.add(post);
}

postAdapter.notifyDataSetChanged();
}

公共(public)无效loadPosts(){

if (ConnectivityHelper.isConnected(getContext())) {
db.deleteAllPosts();
listPosts.clear();
获取帖子(0);
} 别的 {
swipeRefreshLayout.setRefreshing(false);
}

}

公共(public)无效 fetchPosts(int 跳过){
ParseQuery findPostsRequest = new ParseQuery<>("Post");
findPostsRequest.setSkip(跳过);
findPostsRequest.orderByDescending("createdAt");
findPostsRequest.findInBackground(new FindCallback () {
@覆盖
公共(public)无效完成(List posts,ParseException e){

如果(e == null){
for (ParseObject _post : 帖子) {
最终帖子帖子 = new Post();

String objectId = _post.getObjectId();
字符串用户名;
字符串图像Url;

if (_post.getString("用户名") != null) {
用户名 = _post.getString("用户名");
} 别的 {
用户名=“”;
}

ParseQuery findProfilePicQuery = ParseUser.getQuery();
findProfilePicQuery.whereEqualTo("用户名", 用户名);
findProfilePicQuery.findInBackground(new FindCallback () {
@覆盖
公共(public)无效完成(列表 用户,ParseException e){

如果(e == null){
for (ParseUser 用户:用户) {

if (user.getParseFile("profilePic") != null) {
post.setProfilePicUrl(user.getParseFile("profilePic").getUrl());
} 别的 {
post.setProfilePicUrl("");
}

}
}

}
});

if (_post.getParseFile("photo") != null) {
imageUrl = _post.getParseFile("照片").getUrl();
} 别的 {
图片网址 = "";
}

post.setObjectId(objectId);
post.setUsername(用户名);
post.setImageUrl(imageUrl);

db.addPost(post);
}

获取离线帖子();
swipeRefreshLayout.setRefreshing(false);
}

}
});
}

通过使用上面的代码,我可以让 RecyclerView 在到达最后一个项目后加载更多项目,但获取的帖子与我已经获得的帖子相同。我知道我犯了一些非常简单的错误。任何帮助将不胜感激。

最佳答案

以下是使用 Parse 进行分页和刷新数据的工作示例:

    @Override
public void onVideosRequested(final int categoryId, final boolean isRefresh, final int page) {
if (!isRefresh && page == 0) {
mView.showIndicator();
}
ParseQuery<ParseVideo> query = ParseVideo.generateGetVideosByCategoryQuery(categoryId, page, CategoryFragment.VIDEOS_PER_PAGE);
query.findInBackground(new FindCallback<ParseVideo>() {
@Override
public void done(List<ParseVideo> objects, ParseException e) {
if (!isRefresh) {
if (page == 0) {
mView.hideIndicator();
}
} else {
mView.showHideRefreshLayout(false);
}
if (e == null) {
if (objects != null && objects.size() > 0) {
List<ParseVideo> mList = cleanData(objects);
List<ParseVideo> mVideos = DashboardActivity.mVideos.get(categoryId);
if (page == 0) {
mVideos.clear();
mVideos.addAll(mList);
} else {
mVideos.addAll(mList);
}
if (objects.size() < CategoryFragment.VIDEOS_PER_PAGE) {
mView.isLoadMoreAvailable(false);
} else {
mView.isLoadMoreAvailable(true);
}
DashboardActivity.mIndexes.put(categoryId, page);
mView.onVideosReceived(mList.size(), page);
} else {
mView.isLoadMoreAvailable(false);
}
} else {
mView.onDefaultError(e.getLocalizedMessage());
}
}
});
}


@Override
public List<ParseVideo> cleanData(List<ParseVideo> data) {
List<ParseVideo> mList = new ArrayList<>();
for (ParseVideo pv : data) {
if (pv != null && !TextUtils.isEmpty(pv.getName()) && !TextUtils.isEmpty(pv.getId())) {
mList.add(pv);
}
}
return mList;
}

在用户界面中设置分页刷新的默认变量:

private int currentPage = 0;
private boolean isLoadMoreAvailable = true;

并调用电话:

mController.onVideosRequested(mId, false, currentPage);

onLoadMore:

if (isLoadMoreAvailable) {
mController.onVideosRequested(mId, false, currentPage + 1);
}

onLoadMoreRefresh 结合使用的棘手部分是,当您刷新数据时,您必须重置 scrollListeners 总数和之前的计数,以保持 loadMore 仍然可用。

mHidingScrollListener.setPreviousTotal(0);
mHidingScrollListener.setTotalItemCount(0);

最后是解析查询:

public static ParseQuery<ParseVideo> generateGetVideosByCategoryQuery(int categoryId, int page, int displayLimit) {
ParseQuery<ParseVideo> query = ParseQuery.getQuery(ParseVideo.class);
query.whereEqualTo(ParseConstants.IS_DELETED, false);
query.addDescendingOrder(ParseConstants.CREATED_At);
if (categoryId != ParseConstants.CATEGORY_ID_HOME) {
query.whereEqualTo(CATEGORY_ID, categoryId);
}
query.setLimit(displayLimit);
query.setSkip(page * displayLimit);
return query;
}

关于java - 使用 Parse 和 RecyclerView 进行分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40192496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com