我只是使用以下方法在我的数据列表上执行向右和向左滑动。它工作正常。我想知道如何禁用数据列表中某些行的滑动操作。 例如:有一些数据用户不应该删除。我想限制这些行。
let selectedId = Array.find(a => a.id == 'fr-fr');
答案 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);
}