【问题标题】:How can I prevent notifyItemChanged() from killing the ripple effect when selecting an item in a RecyclerView?在 RecyclerView 中选择项目时,如何防止 notifyItemChanged() 消除连锁反应?
【发布时间】:2016-09-14 21:24:30
【问题描述】:

我有一个RecyclerView,我希望允许用户使用长按来选择视图。这工作得很好,除了涟漪效应在我调用notifyItemChanged()notifyDataSetChanged 以指示选择时终止。我怎样才能防止这种情况发生?

注意,这个问题之前已经问过(Example 1Example 2)。这些问题的答案是使用notifyItemChanged 而不是notifyDataSetChanged。我已经尝试了这两种方法,但它并没有改变我的行为。

【问题讨论】:

  • 我使用 drawable 作为背景,所以你不需要通知任何更改只需检查我的问题:RecyclerView Find state.xml 并尝试做类似的事情
  • 如果只有背景颜色可以接受,那将是一个不错的选择,但我真的想对视图进行更积极的更改。
  • 您能否通过“活动更改”指定更多内容
  • 我有一个自定义视图,可以处理更改边框大小并显示不同的图像。
  • 在自定义视图中覆盖 onSelected。如果选中,更改边框大小等并使其无效。

标签: android android-layout android-recyclerview ripple


【解决方案1】:

notifyItemChanged() 方法有两个版本。一个只占据位置,另一个占据位置和有效载荷。

在我的情况下,第一个打破了连锁反应,而第二个起作用了。至少当我将刚刚更改的对象作为有效负载传递时。

【讨论】:

    【解决方案2】:

    a) 将 DiffUtilCallback 添加到您的适配器

    b) 确保您的 areItemsTheSame 方法按 id 而不是按内容比较项目。 因为如果按内容比较,它会认为你删除了以前的单元格并插入了新的单元格,并消除了涟漪效应。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-03
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多