简体   繁体   English

禁用ViewTouchHelper作为视图的一部分

[英]Disable ItemTouchHelper for a part of a viewholder

I have this RecyclerView with a viewholder that has a title/TextView and a ViewPager. 我有一个带有视图的RecyclerView,它有一个标题/ TextView和一个ViewPager。

The items from the RecyclerView can get swiped away with an ItemTouchHelper. 使用ItemTouchHelper可以清除RecyclerView中的项目。

I want to disable the swiping away part for the viewpager but not if you start dragging on the title/TextView. 我想禁用viewpager的滑动部分,但是如果你开始拖动标题/ TextView则不能。

Anyone who knows how to disable swipe for just a part of a viewholder? 任何知道如何禁用仅为视图的一部分滑动的人?

I can disable swiping an entire viewholder with the ItemTouchHelper this way: 我可以通过这种方式禁用使用ItemTouchHelper滑动整个视图:

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

return super.getSwipeDirs(recyclerView, viewHolder);

But how to disable it for just a part of the ViewHolder? 但是如何仅为ViewHolder的一部分禁用它?

Try this code 试试这个代码

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) {

        }
    });

Solved my problem by adding the requestDisallowInterceptTouchEvent(true) on the child viewpager: 通过在子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;

    }
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用ItemTouchHelper滑动后如何重置ViewHolder - How to reset ViewHolder after swipe using ItemTouchHelper 使用ItemTouchHelper与RecyclerView中的锁定ViewHolder进行交互 - Interaction with locked ViewHolder in RecyclerView using ItemTouchHelper 使用ItemTouchHelper的RecyclerView仅可部分滑动 - RecyclerView with ItemTouchHelper only part swipeable 如何将文本值从ViewHolder发送到ItemTouchHelper类? - How can I send text value from ViewHolder to ItemTouchHelper class? 如何在 ViewHolder 中禁用 onLongPressListener? - How to disable a onLongPressListener in a ViewHolder? 在RecyclerView中禁用ItemTouchHelper滑动某些行 - Disable ItemTouchHelper Swipe for some rows in RecyclerView RecyclerView.ViewHolder 中的 Android ScrollView:防止 ItemTouchHelper 获取触摸事件? - Android ScrollView inside RecyclerView.ViewHolder: prevent ItemTouchHelper from getting touch event? 禁用ItemTouchHelper上的动画时始终提供相同的滑动方向 - disable animation on ItemTouchHelper always give same swipe direction 使用 ItemTouchHelper.SimpleCallback 在 RecyclerView 中禁用位置滑动 - Disable Swipe for position in RecyclerView using ItemTouchHelper.SimpleCallback ViewHolder无法创建ListView,无法将“充气布局”存储为ViewHolder的一部分 - ViewHolder failing to create a ListView, Can't store “inflater layout” as part of my ViewHolder
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM