防止recyclelerview停止滚动触摸事件

时间:2016-03-03 14:14:09

标签: android android-recyclerview

我有一个简单的recyclerview,其中包含一个显示数字列表的字符串适配器,我希望避免在滚动时它停止并且用户触摸它。 我已经取消了在用户拖动时手动滚动recyclerview,但我需要以编程方式自己管理滚动(开始和停止滚动)

我不想让用户与recyclerview进行交互。 这是一个小video,显示当用户滚动(停止)时触摸Recyclerview时会发生什么。我想取消这种行为。

这是我取消用户拖动滚动的方式

public static void saveVideos(HttpContent content, String filename, bool overwrite)
    {
        string pathName = Path.GetFullPath(filename);
        using (Stream fs = new FileStream(pathName, FileMode.Create, FileAccess.Write, FileShare.None, 4096, FileOptions.None))
        {
               byte[] buffer = content.ReadAsByteArrayAsync().Result;
               fs.Write(buffer, 0, buffer.Length);
        }
    }

通过添加这些代码行,行为没有变化。

recyclerViewSlot.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
        @Override
        public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
            // set return "true" = disables scrolling behaviour on dragging
            return true;
        }

        @Override
        public void onTouchEvent(RecyclerView rv, MotionEvent e) {
        }

        @Override
        public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
        }
    });

2 个答案:

答案 0 :(得分:2)

您必须扩展RecyclerView类,然后手动阻止onTouch被调用,如下所示:

public class YourRecyclerView extends RecyclerView {

    private boolean lock=false;
    public YourRecyclerView (Context context) {
        super(context);

    }

    public YourRecyclerView (Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public YourRecyclerView (Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

    }


    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        if(!lock){

        return super.onTouchEvent(ev);
        }
        else{
            return true;
        }

    }


    /**
     * @return the lock
     */
    public boolean isLock() {
        return lock;
    }

    /**
     * @param lock the lock to set
     */
    public void setLock(boolean lock) {
        this.lock = lock;
    }
}

答案 1 :(得分:2)

在自定义RecyclerView中覆盖onInterceptTouchEvent,您可以实现这一点。

@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
    return false;
}