Skip to content

recyclerview 当自定义了或者加了自定义分割线后滑动上去后无法滑动上来(已解决) #30

@cubebbox

Description

@cubebbox

这个主要是由于isRecyclerViewTop此方法做判断时由于一些情况下顶部距离可能不为0时导致滑动可能不会触发向下滑动 所以需要固定配置,因人而异配置方法可能不同我的配置方法是:
加一个顶部偏移值

先修改这个HeaderScrollHelper类下的方法:

/**
     * 顶部偏移值,主要是给isRecyclerViewTop此方法做判断时由于一些情况下顶部距离可能不为0 所以需要固定配置
     */
    private int topOffsetHeight = 0;

修改滑动内容适配器:

public void setCurrentScrollableContainer(ScrollableContainer scrollableContainer, int topOffsetHeight) {
        this.mCurrentScrollableContainer = scrollableContainer;
        this.topOffsetHeight = topOffsetHeight;
    }

源方法isRecyclerViewTop改为这样:

  private boolean isRecyclerViewTop(RecyclerView recyclerView) {
        if (recyclerView != null) {
            RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
            if (layoutManager instanceof LinearLayoutManager) {
                int firstVisibleItemPosition = ((LinearLayoutManager) layoutManager).findFirstVisibleItemPosition();
                View childAt = recyclerView.getChildAt(0);
                RecyclerView.ItemDecoration itemDecoration = recyclerView.getItemDecorationAt(0);
                if (childAt == null ||
                        (firstVisibleItemPosition == 0 && (childAt.getTop() == topOffsetHeight || childAt.getTop() == 0))) {
                    return true;
                }
            }
        }
        return false;
    }

然后是修改此HeaderViewPager类下的方法(我修改了一个方法并且加了一个方法):

   public void setCurrentScrollableContainer(HeaderScrollHelper.ScrollableContainer scrollableContainer, int topOffset) {
        mScrollable.setCurrentScrollableContainer(scrollableContainer, topOffset);
    }

    public void setCurrentScrollableContainer(HeaderScrollHelper.ScrollableContainer scrollableContainer) {
        mScrollable.setCurrentScrollableContainer(scrollableContainer, 0);
    }

然后就是特例的一些界面特例处理

                    headerViewPager.setCurrentScrollableContainer((HeaderViewPagerFragment) fragmentList.get(position),
                            DensityUtil.dip2px(CustomerDetailActivity.this, 30));
                } else {
                    headerViewPager.setCurrentScrollableContainer((HeaderViewPagerFragment) fragmentList.get(position));
                }

至此应该能解决大部分问题了

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions