抽屉中的SwipeRefreshLayout手势检测

时间:2014-09-03 11:45:48

标签: android navigation-drawer gesture-recognition

我在抽屉里使用SwipeRefreshLayout。当我在列表视图中向上和向下滚动时,手势应该是直线上下移动,如果手指只是移动一点而不抬起它,滚动手势就会停止并启动手势以打开关闭抽屉。 如果我没有使用SwipeRefreshLayout,滚动手势不会停止,直到我举起手指。

这是布局:

<android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swipe_to_refresh_lisview_container"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical"
        tools:ignore="NestedWeights" >

        <views.IndexableListView
            android:id="@+id/listview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#FFFFFF" />
    </android.support.v4.widget.SwipeRefreshLayout>

代码与此代码相同: http://antonioleiva.com/swiperefreshlayout/

1 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。滚动时必须“锁定”抽屉,滚动均匀后再次解锁。为此,我使用了两件事:

  1. 将OnScrollListener添加到listView,如:

    mDrawerListView.setOnScrollListener(new AbsListView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(AbsListView absListView, int i) {
            if (i == SCROLL_STATE_IDLE)
                mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
            else
                mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN);
        }
    
        @Override
        public void onScroll(AbsListView absListView, int i, int i2, int i3) {
    
        }
    });
    
  2. 为避免尝试触发“刷新事件”时出现问题,您应该在此链接上实施spencer建议的解决方法:Issue 69074