RecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
Log.d("-------newState------->" + newState);
}
});
当我滑到顶部时,打印日志:
[onScrollStateChanged()行:412] ------- newState -------> 1
[onScrollStateChanged()行:412] ------- newState -------> 2
[onScrollStateChanged()行:412] ------- newState -------> 0
但是几秒钟后,仅显示最后一行日志。这是第一个问题。第二个问题:CollapsingToolbarLayout和AppBarLayout之间的com.xxx.ExpadnTabLayout具有click事件,当我单击ExpandTabLayout视图时,在其底部下方将显示一个弹出窗口。因此,当“ newState”参数的值为2时,以上情况会导致精神错乱。尽管页面是静态的,并且该值未及时更改为0。所以我该怎么办?
任何帮助将不胜感激!!!
最佳答案
该解决方案仅覆盖HeaderBehavior类中的“ onNestedPreScroll”方法,并在其中停止“ mScroller”。以下代码:(欢迎指出错误> _>)
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
app:layout_behavior="com.xxx.android.ui.widgets.behavior.CustomBehavior"
app:elevation="0dip">
CustomeBehavior.class:
private void getParentScroller(Context context) {
if (mScroller != null) return;
mScroller = new OverScroller(context);
try {
Class<?> reflex_class = getClass().getSuperclass().getSuperclass();
Field fieldScroller = reflex_class.getDeclaredField("mScroller");
fieldScroller.setAccessible(true);
fieldScroller.set(this, mScroller);
} catch (Exception e) {
}
}
@Override
public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dx, int dy, int[] consumed, int type) {
if (mScroller != null) {
if (mScroller.computeScrollOffset()) {
mScroller.abortAnimation();
}
}
if (type == ViewCompat.TYPE_NON_TOUCH && getTopAndBottomOffset() == 0) {
ViewCompat.stopNestedScroll(target, type);
}
super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type);
}
关于java - 回收器添加监听器onScrollState将回调滚动状态“SCROLL_STATE_IDLE”更改为不可忽略的延迟时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50388586/