禁用ViewTouchHelper作为视图的一部分

Eli*_*ias 3 android android-viewpager android-recyclerview

我有一个带有视图的RecyclerView,它有一个标题/ TextView和一个ViewPager.

使用ItemTouchHelper可以清除RecyclerView中的项目.

我想禁用viewpager的滑动部分,但是如果你开始拖动标题/ TextView则不能.

任何知道如何禁用仅为视图的一部分滑动的人?

我可以通过这种方式禁用使用ItemTouchHelper滑动整个视图:

ItemTouchHelper()...
@Override
public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder)
{
    if (viewHolder instanceof UnswipeableViewHolder)
    {
        return 0;
    }
}

return super.getSwipeDirs(recyclerView, viewHolder);
Run Code Online (Sandbox Code Playgroud)

但是如何仅为ViewHolder的一部分禁用它?

Rav*_*udi 7

试试这个代码

recyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
        @Override
        public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
            int action = e.getAction();
            switch (action) {
                case MotionEvent.ACTION_MOVE:
                    rv.getParent().requestDisallowInterceptTouchEvent(true);
                    break;
            }
            return false;
        }

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

        }

        @Override
        public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

        }
    });
Run Code Online (Sandbox Code Playgroud)


Eli*_*ias 6

通过在子 viewpager 上添加 requestDisallowInterceptTouchEvent(true) 解决了我的问题:

this.viewPager.setOnTouchListener(new View.OnTouchListener()
{
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent)
    {
        int action = motionEvent.getAction();

        switch (action)
        {
            case MotionEvent.ACTION_MOVE:
                view.getParent()
                        .requestDisallowInterceptTouchEvent(true);
                break;
        }

        return false;

    }
});
Run Code Online (Sandbox Code Playgroud)