禁用ItemTouchHelper在RecyclerView中滑动某些行

时间:2018-04-24 13:24:05

标签: java android android-recyclerview

我只是使用以下方法在我的数据列表上执行向右和向左滑动。它工作正常。我想知道如何禁用数据列表中某些行的滑动操作。 例如:有一些数据用户不应该删除。我想限制这些行。

let selectedId = Array.find(a => a.id == 'fr-fr');

2 个答案:

答案 0 :(得分:5)

使用ItemTouchHelper.SimpleCallback的{​​{3}}。您需要通过不返回滑动标记来检测要禁止滑动的视图持有者。

getMovementFlags()是网格布局不允许滑动的示例。

  @Override
    public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
        // Set movement flags based on the layout manager
        if (recyclerView.getLayoutManager() instanceof GridLayoutManager) {
            final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
            final int swipeFlags = 0;
            return makeMovementFlags(dragFlags, swipeFlags);
        } else {
            final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
            final int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END;
            return makeMovementFlags(dragFlags, swipeFlags);
        }
}

答案 1 :(得分:0)

i want to disable swipe where object Marked Type not equal to 1

 @Override
        public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
            final int position = viewHolder.getAdapterPosition();

            int sectionIndex = listAdapter.getSectionForAdapterPosition(position);
            int itemIndex = listAdapter.getPositionOfItemInSection(sectionIndex, position);

            myModelObject temp = filteredArrayList.get(sectionIndex).get(itemIndex);

            if(!temp.getMarkedType().equals("1")){
                return 0;
            }

            return super.getSwipeDirs(recyclerView, viewHolder);
        }