【问题标题】:Detach ItemTouchHelper from RecyclerView从 RecyclerView 中分离 ItemTouchHelper
【发布时间】:2016-05-22 14:16:00
【问题描述】:

我有一个 RecyclerView 和一个有效的 ItemTouchHelper。一切都很好,但我想知道是否有一种方法可以在不重新创建列表的情况下将ItemTouchHelper 从RecyclerView 中分离出来?为了好玩,这是我用来附加的代码:

ItemTouchHelper.Callback callback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT)
{
    ...
};
mItemTouchHelper = new ItemTouchHelper(callback);
mItemTouchHelper.attachToRecyclerView(mPasswordList);

理想情况下,我想在 onResume() 中检查此 RecyclerView 所在的 Activity 的偏好,并据此分离 ItemTouchHelper。

【问题讨论】:

    标签: android android-recyclerview itemtouchhelper


    【解决方案1】:

    您可以通过将 recyclerview 设置为 null 来将 ItemTouchHelper 从 RecyclerView 中分离出来:

    mItemTouchHelper.attachToRecyclerView(null);
    

    【讨论】:

    • 不错的把戏。但是,请注意这个限制:issuetracker.google.com/issues/37092256 Google 声称他们修复了这个错误。但是,在撰写此评论时,该修复程序尚未向公众发布。
    • @CheokYanCheng,我检查了 Android 文档,they say mItemTouchHelper.attachToRecyclerView(null) 可用于分离。
    【解决方案2】:

    我最初的动机是让用户能够禁用列表项上的滑动操作,如果他们愿意的话。我认为这样做的方法是将ItemTouchHelper 与RecyclerView 分离。我现在发现ItemTouchHelper.SimpleCallback 有以下方法可以覆盖:

    @Override
    public boolean isItemViewSwipeEnabled()
    {
        return mSwipable;
    }
    

    因此,在此处返回正确状态有效地关闭了滑动处理。我希望这对将来的某人有所帮助。

    【讨论】:

    • 你拯救了我的一天(..或我的一周)。谢谢!
    • 完美解决方案!
    • 这对我来说很完美,我可以根据具体情况将 mSwipable 设置为 true 或 false 非常感谢!
    【解决方案3】:

    对我来说,要禁用附加到RecyclerView 的整个ItemTouchHelper,只需将其设置为null

    mItemTouchHelper = null;
    

    要重新启用,请将其设置为它的值

    mItemTouchHelper = new ItemTouchHelper(callback);
    

    【讨论】:

      猜你喜欢
      • 2015-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-07
      • 2019-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多