像这样的xml代码:

java - 回收器添加监听器onScrollState将回调滚动状态“SCROLL_STATE_IDLE”更改为不可忽略的延迟时间-LMLPHP
页面侦听器代码如下:

   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/

10-09 02:58