【问题标题】:Pagination not working after opening an item in recyclerview - Android在recyclerview中打开项目后分页不起作用 - Android
【发布时间】:2021-08-20 06:39:26
【问题描述】:

我正在尝试将分页添加到 viewpager 内的片段(由 recyclerview 组成)。 完美运行

案例: 我单击任何项​​目(打开一个活动,即 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));

            }
        }

    }
};

加载帖子功能

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();

onStop(片段)

@Override
public void onStop() {
    super.onStop();
    recyclerView.removeOnScrollListener(recyclerViewOnScrollListener);
    if (getPosts != null && !getPosts.isCanceled())
        getPosts.cancel();
}

onPause(片段)

@Override
public void onPause() {
    super.onPause();
    LocalBroadcastManager.getInstance(mContext).unregisterReceiver(postEventReceiver);
    LocalBroadcastManager.getInstance(mContext).unregisterReceiver(profileEventReceiver);
}

【问题讨论】:

  • 你在onPause()/onStop()做过什么吗?
  • @RoshanaPitigala 添加了 onStop 和 onPause 的代码,请检查

标签: java android android-fragments android-recyclerview


【解决方案1】:

由于您要删除onStop 中的onScrollListener,您应该将其重新添加到onStart()

@Override
public void onStart() {
    recyclerView.addOnScrollListener(recyclerViewOnScrollListener);
    ...
}

【讨论】:

  • onResume 还是 onStart?
  • (onStop -> onStart) 或 (onPause -> onResume)
  • 既然您要在onStop() 中删除它,最好在onStart() 中再次添加它
  • 使用上面的代码,页面重复了 2-3 次,知道如何解决吗?
  • @Sinhaji 不要把addOnScrollListener 放到onResume() 把它放到onStart()。这个想法是如果滚动侦听器在onStop 中被删除,它应该在onStart 中再次添加。研究 Activity/Fragment 生命周期,了解为什么会得到 2-3 页。
猜你喜欢
  • 1970-01-01
  • 2017-10-22
  • 1970-01-01
  • 2016-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-30
  • 2015-09-11
相关资源
最近更新 更多