当前位置: 首页 > 知识库问答 >
问题:

无法检索无尽滚动中的最后一项回收员视图

邹玄裳
2023-03-14

我有一个endless Recycler视图,其中包含使用JSoup从一个在线论坛线程中提取的数据。recyclerview将不断填充自己,直到用户到达最后一页。我想膨胀一个“端视图”,一旦用户到达最后一页,滚动到最后一个可见的项目,但我无法检索它。

我尝试使用getItemCount()和findLastVisibleItemPotion()从回收器视图linearlayoutManager。它设法获得正确的大小,但每次加载下一页时,“结束视图”都会在底部膨胀。当用户到达最后一页的最后一项时,它不会膨胀。

RecyclerAdapter.java

public RecyclerAdapter(Context context, final ArrayList<ReplyItem> recyclerReplyList, RecyclerView recyclerView) {
    this.recyclerReplyList= recyclerReplyList;
    this.context = context;

    if (recyclerView.getLayoutManager() instanceof LinearLayoutManager) {

        final LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView
                .getLayoutManager();


        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
                    @Override
                    public void onScrolled(RecyclerView recyclerView,
                                           int dx, int dy) {
                        super.onScrolled(recyclerView, dx, dy);

                        totalItemCount = linearLayoutManager.getItemCount();
                        lastVisibleItem = linearLayoutManager.findLastVisibleItemPosition();
                        firstVisibleItem = linearLayoutManager.findFirstVisibleItemPosition();
                        verylastVisibleItem = linearLayoutManager.findLastCompletelyVisibleItemPosition();

                        if (!loading && totalItemCount <= (lastVisibleItem + visibleThreshold)) {

                            if (onLoadMoreListener != null) {
                                onLoadMoreListener.onLoadMore();

                            }

                            loading = true;

                        }

                    }
                });

    }

}


@Override
public int getItemViewType(int position) {


    if(recyclerReplyList.get(position) != null){
        return VIEW_POST;
    }

    else if(position == totalItemCount){
        return VIEW_END_ITEM;
    }

}


 @Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                  int viewType) {
    RecyclerView.ViewHolder vh;
    if (viewType == VIEW_POST) {
        View v = LayoutInflater.from(parent.getContext()).inflate(
                R.layout.replies_row, parent, false);

        vh = new PostViewHolder(v);

    }

    else  if (viewType == VIEW_END_ITEM) {
        View v = LayoutInflater.from(parent.getContext()).inflate(
                R.layout.end_item, parent, false);

        vh = new EndViewHolder(v);

    }

     return vh;
}

共有2个答案

公羊光明
2023-03-14

您可以使用setOnScrollChangeListener,但它将支持API 23及更高版本

recyclerView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
        @Override
        public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {

            if (linearLayoutManager .findLastCompletelyVisibleItemPosition() == linearLayoutManager.findLastVisibleItemPosition())
               //last item reached 

    });

编辑

要识别滚动方向,请使用 scrollXscrollY 的 onScrollChange

if (scrollY == 0) { 
    // scrolled horizontally  
} 
叶琦
2023-03-14

尝试将下边距设置为回收商视图!

 类似资料:
  • 我正在拼命地尝试在一个使用Kotlin的android应用上实现无休止的滚动。所有的教程要么是无用的,因为他们没有正确地解释事情。例如:https://github.com/chetdeva/recyclerView-bindings 它看起来很有前途,但作者使用了这样的短语,比如“把这个放在你的bindingadapter中”,所以我查看了这个是什么,我找到了一个java文件,但如果你在其中插入

  • 我以以下方式使用来显示在SQLite DB中更新的位置项列表。 这些项目被很好地删除,并在我滑动它们时更新。但是当我滑动删除最后一个项目时,它又出现在视图中。当我关闭应用程序并重新打开应用程序时,该项目已被删除。 但当项目被滑动以删除时,在该应用程序运行的实例中,即使滑动多次,该项目也不会从视图中删除。 refreshPlacesData() 我错过了什么吗?谢谢。 编辑:我尝试更新适配器而不是m

  • 我有一个回收站视图,在右下顶部有一个FAB。 当滚动时,我希望允许用户进一步向上滚动,以使最后一项完全可见,并且不被FAB覆盖。允许在底部额外显示48像素的背景即可。 我尝试添加一个透明的页脚项目,这可以解决问题。但是,在向列表中添加排序后,透明页脚项在排序过程中会产生一些 UI 故障(分隔线显示在正常项的下方)。 我试着添加了一个边距,但是空间总是被浪费掉了。当用户在顶部查看第一个项目时,FAB

  • 我有一个像相册这样的项目列表,我通过RecyclerView显示它。 此外,每个项目都有一个按钮,通过单击该按钮可以向服务器发送一些数据,然后滚动到列表中的下一个位置。 所以我的问题是: 如果调用了smoothScrollToPosition()方法,如何防止RecyclerView手动滚动(手势),但滚动到某个位置?

  • 我已经开始在Crashlytics上报道这次坠机事件。我不知道如何复制它,但它似乎都是内部的代码。我认为这来自于我的<代码>回收视图</代码>它从未真正改变过。用户可以刷新它,但随后会替换所有项,并调用。

  • 问题内容: from selenium import webdriver from selenium.webdriver.common.by import By from selenium.common.exceptions import StaleElementReferenceException, TimeoutException from selenium.webdriver.support