在 recyclerview 中打开项目后分页不起作用 - Android
Pagination not working after opening an item in recyclerview - Android
我正在尝试将分页添加到 viewpager 内的片段(包含 recyclerview)。 完美运行。
案例:
我单击任何项目(打开 activity 即 detailView),但在从 detailView 返回到由 recyclerview 组成的片段后,分页停止工作。
片段代码
private int pageNumber = 1;
在 oncreateview 上
sharedPreferenceUtil.setStringPreference(Constants.TEMPPAGENO, "1");
onScroll 侦听器:
private RecyclerView.OnScrollListener recyclerViewOnScrollListener = new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
RecyclerView.Adapter adapter = recyclerView.getAdapter();
if (layoutManager.getChildCount() > 0) {
// Calculations..
int indexOfLastItemViewVisible = layoutManager.getChildCount() - 1;
View lastItemViewVisible = layoutManager.getChildAt(indexOfLastItemViewVisible);
int adapterPosition = layoutManager.getPosition(lastItemViewVisible);
boolean isLastItemVisible = (adapterPosition == adapter.getItemCount() - 1);
if (!postType.equals("bookmark") && isLastItemVisible && !isLoading && !allDone) {
pageNumber++;
discoverRecyclerAdapter.showLoading();
loadPosts();
sharedPreferenceUtil.setStringPreference(Constants.TEMPPAGENO, String.valueOf(pageNumber));
}
}
}
};
loadposts 函数
private void loadPosts() {
if (postType != null && mContext != null) {
if (postType.equals("bookmark")) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (discoverRecyclerAdapter.isLoaderShowing())
discoverRecyclerAdapter.hideLoading();
if (swipeRefreshLayout.isRefreshing())
swipeRefreshLayout.setRefreshing(false);
discoverRecyclerAdapter.addItemsAtBottom(bookmarkedPosts);
if (bookmarkedPosts.isEmpty()) {
recyclerView.setVisibility(View.GONE);
emptyView.setVisibility(View.VISIBLE);
}
}
}, 200);
} else {
isLoading = true;
if (TextUtils.isEmpty(userId))
getPosts = weService.getPosts(sharedPreferenceUtil.getStringPreference(Constants.KEY_API_KEY, null), postType.equals("hot") ? 1 : 0, pageNumber);
else
getPosts = weService.getPostsByUserId(sharedPreferenceUtil.getStringPreference(Constants.KEY_API_KEY, null), userId, postType.equals("hot") ? 1 : 0, pageNumber);
getPosts.enqueue(callBack);
}
}
}
onResume(片段)
pageNumber = Integer.parseInt(sharedPreferenceUtil.getStringPreference(Constants.TEMPPAGENO, String.valueOf(pageNumber)));
pageNumber++;
discoverRecyclerAdapter.showLoading();
loadPosts();
on onStop(片段)
@Override
public void onStop() {
super.onStop();
recyclerView.removeOnScrollListener(recyclerViewOnScrollListener);
if (getPosts != null && !getPosts.isCanceled())
getPosts.cancel();
}
on onPause(片段)
@Override
public void onPause() {
super.onPause();
LocalBroadcastManager.getInstance(mContext).unregisterReceiver(postEventReceiver);
LocalBroadcastManager.getInstance(mContext).unregisterReceiver(profileEventReceiver);
}
由于您要删除 onStop
中的 onScrollListener
,您应该将其重新添加到 onStart()
中
@Override
public void onStart() {
recyclerView.addOnScrollListener(recyclerViewOnScrollListener);
...
}
我正在尝试将分页添加到 viewpager 内的片段(包含 recyclerview)。 完美运行。
案例: 我单击任何项目(打开 activity 即 detailView),但在从 detailView 返回到由 recyclerview 组成的片段后,分页停止工作。
片段代码
private int pageNumber = 1;
在 oncreateview 上
sharedPreferenceUtil.setStringPreference(Constants.TEMPPAGENO, "1");
onScroll 侦听器:
private RecyclerView.OnScrollListener recyclerViewOnScrollListener = new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
RecyclerView.Adapter adapter = recyclerView.getAdapter();
if (layoutManager.getChildCount() > 0) {
// Calculations..
int indexOfLastItemViewVisible = layoutManager.getChildCount() - 1;
View lastItemViewVisible = layoutManager.getChildAt(indexOfLastItemViewVisible);
int adapterPosition = layoutManager.getPosition(lastItemViewVisible);
boolean isLastItemVisible = (adapterPosition == adapter.getItemCount() - 1);
if (!postType.equals("bookmark") && isLastItemVisible && !isLoading && !allDone) {
pageNumber++;
discoverRecyclerAdapter.showLoading();
loadPosts();
sharedPreferenceUtil.setStringPreference(Constants.TEMPPAGENO, String.valueOf(pageNumber));
}
}
}
};
loadposts 函数
private void loadPosts() {
if (postType != null && mContext != null) {
if (postType.equals("bookmark")) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (discoverRecyclerAdapter.isLoaderShowing())
discoverRecyclerAdapter.hideLoading();
if (swipeRefreshLayout.isRefreshing())
swipeRefreshLayout.setRefreshing(false);
discoverRecyclerAdapter.addItemsAtBottom(bookmarkedPosts);
if (bookmarkedPosts.isEmpty()) {
recyclerView.setVisibility(View.GONE);
emptyView.setVisibility(View.VISIBLE);
}
}
}, 200);
} else {
isLoading = true;
if (TextUtils.isEmpty(userId))
getPosts = weService.getPosts(sharedPreferenceUtil.getStringPreference(Constants.KEY_API_KEY, null), postType.equals("hot") ? 1 : 0, pageNumber);
else
getPosts = weService.getPostsByUserId(sharedPreferenceUtil.getStringPreference(Constants.KEY_API_KEY, null), userId, postType.equals("hot") ? 1 : 0, pageNumber);
getPosts.enqueue(callBack);
}
}
}
onResume(片段)
pageNumber = Integer.parseInt(sharedPreferenceUtil.getStringPreference(Constants.TEMPPAGENO, String.valueOf(pageNumber)));
pageNumber++;
discoverRecyclerAdapter.showLoading();
loadPosts();
on onStop(片段)
@Override
public void onStop() {
super.onStop();
recyclerView.removeOnScrollListener(recyclerViewOnScrollListener);
if (getPosts != null && !getPosts.isCanceled())
getPosts.cancel();
}
on onPause(片段)
@Override
public void onPause() {
super.onPause();
LocalBroadcastManager.getInstance(mContext).unregisterReceiver(postEventReceiver);
LocalBroadcastManager.getInstance(mContext).unregisterReceiver(profileEventReceiver);
}
由于您要删除 onStop
中的 onScrollListener
,您应该将其重新添加到 onStart()
@Override
public void onStart() {
recyclerView.addOnScrollListener(recyclerViewOnScrollListener);
...
}