仅在AppBarLayout完全展开时启用SwipeRefreshLayout

只有当AppBarLayout完全展开时,我怎样才能启用SwipeRefreshLayout 。 我只需要在下一个滑动手势上启用刷新模式。 现在,我尝试了

 appBar.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { @Override public void onOffsetChanged(AppBarLayout appBarLayout, final int verticalOffset) { refreshLayout.setEnabled(verticalOffset == 0); } }); 

当然,它的作品! 但是它并不像我需要的那样。 此代码在用户继续滑动手势的同时立即启用刷新模式。 我只需要在AppBarLayout扩展后的下一次滑动时启用它。
谁知道如何做到这一点?

那么,我在同样的问题上磕磕绊绊。 这是我发现的。 我的解决方案不是完美的,但它为我工作。 假设我们有一个包装在SwipeRefreshLayout中的AppBarLayout和RecyclerView。 注意! Kotlin发现。

 recyclerView.setOnTouchListener { _, motionEvent -> if (motionEvent.action == MotionEvent.ACTION_CANCEL || motionEvent.action == MotionEvent.ACTION_UP) { // 0.5f is used because I have snap parameter for CollapsingToolbar // and it automatically collapses/expands // if user finishes his scroll action in the middle of collapsing // so if AppBar is going to be completely expanded // we need to enable SwipeRefreshLayout swipeRefreshLayout.isEnabled = (appBarLayout.collapsingPercentage() < 0.5f) } false } /** * @return 1.0f if AppBarLayout is completely collapsed, * 0.0f if completely expanded, percentage of * total height collapsed when collapsing/expanding is in progress. */ fun AppBarLayout.collapsingPercentage() = Math.abs(this.height - this.bottom) / this.totalScrollRange.toFloat()