You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为RecyclerView中部分行禁用ItemTouchHelper侧滑功能

嘿,这个需求很常见,其实只需要在你现有的ItemTouchHelper.SimpleCallback里加个方法就能轻松搞定!

你需要重写getSwipeDirs()方法——这个方法的作用就是给每个单独的列表项指定允许的侧滑方向。如果某个条目不允许侧滑,直接返回0就可以完全禁用它的侧滑功能。

具体做法看下面的代码示例,我把你的代码补全并加上了关键逻辑:

ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
    @Override
    public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
        return false; // 你不需要拖拽功能,保持返回false就行
    }

    @Override
    public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
        // 这里是你原来的侧滑处理逻辑,比如删除数据、执行对应操作
    }

    // 关键就在这个重写的方法!
    @Override
    public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
        // 先拿到当前列表项对应的位置和数据模型
        int position = viewHolder.getAdapterPosition();
        YourDataModel dataItem = ((YourAdapterClass) recyclerView.getAdapter()).getItem(position);
        
        // 根据你的业务条件判断:比如如果是不可删除的条目,就禁用侧滑
        if (dataItem.isNonDeletable()) { // 假设你的数据模型里有这个判断字段或方法
            return 0; // 返回0表示禁止所有侧滑方向
        }
        // 其他正常条目,保持原来允许的左右侧滑
        return super.getSwipeDirs(recyclerView, viewHolder);
    }
};

这里的核心逻辑是:通过getSwipeDirs()针对每个条目动态返回允许的侧滑方向。返回0就意味着这个条目完全不能被侧滑,完美匹配你的需求。

如果你的Adapter没有对外暴露getItem()方法,也可以换个方式:比如在创建ViewHolder的时候,把对应的数据对象绑定到ViewHolder里,然后在这个方法里通过viewHolder直接获取数据进行判断,效果是一样的。

内容的提问来源于stack exchange,提问作者Im Batman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:25:58