像这样的xml代码:
页面监听器代码如下:
RecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
Log.d("-------newState------->" + newState);
}
});
当我滑倒到顶部时,打印日志:
[onScrollStateChanged()line:412] ------- newState -------> 1
[onScrollStateChanged()line:412] ------- newState -------> 2
[onScrollStateChanged()line:412] ------- newState -------> 0
然而,几秒钟后,最后一行日志才会显示。这是第一个问题。第二个问题:CollapsingToolbarLayout和AppBarLayout之间的com.xxx.ExpadnTabLayout有点击事件,当我点击ExpandTabLayout视图时,它下面会有一个popwindow显示。因此,当“newState”参数的值为2时,上述情况会导致精神错乱视图。虽然页面是静态的,并且值不会及时更改为0。那么我能为这些问题做些什么。
任何帮助将不胜感激!!!
答案 0 :(得分: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);
}