【问题标题】:How can I override methods notifyDataSetChanged, notifyItemChanged ... of RecyclerView Adapter如何覆盖 RecyclerView Adapter 的方法 notifyDataSetChanged、notifyItemChanged ...
【发布时间】:2015-12-18 07:03:31
【问题描述】:

作为标题。 我正在编写一个支持多选模式的自定义 RecyclerView。我需要跟踪每个项目的选中/未选中状态。所以在recyclerView的数据大小发生变化之后。我想更新我的跟踪状态列表的大小。 但我不知道在哪里重写方法:notifyDataSetChanged、notifyItemChagned ....

【问题讨论】:

  • 你找到解决办法了吗?

标签: android android-recyclerview


【解决方案1】:

正如前面的答案已经正确说明的那样。你不能因为这些方法是final

我在实现FastAdapter时遇到了同样的情况

我想出的唯一解决方案是将这些方法命名为略有不同。 notifyDataSetChanged -> notifyAdapterDataSetChanged https://github.com/mikepenz/FastAdapter/blob/develop/library/src/main/java/com/mikepenz/fastadapter/FastAdapter.java#L1354

public void notifyAdapterDataSetChanged() {
    //... your custom logic
    notifyDataSetChanged();
}

对于库来说,改进有关这一点的文档非常重要,但它是目前唯一的解决方案。

【讨论】:

    【解决方案2】:

    你不能,因为它是 final in RecyclerView.Adapter 请参阅 here

    您可以 override 使用 BaseAdapterListView

    @Override
    public void notifyDataSetChanged() {
        // TODO Auto-generated method stub
        super.notifyDataSetChanged();
    }
    

    【讨论】:

      【解决方案3】:

      将适配器注册为 RecyclerView.Adapter 的观察者。

      yourRecyclerView.getAdapter().registerAdapterDataObserver(new AdapterDataObserver() {
          @Override
          public void onChanged() {
              // Do nothing
          }
      });
      

      【讨论】:

        【解决方案4】:

        你不能,因为你不能覆盖 final 方法

        【讨论】:

        • 这是一个正确的答案,但您必须解释更多并向OP提供解决方案。例如,包装类或覆盖动画,以防 OP 只想在 notifyItemInserted() 时更改动画。
        猜你喜欢
        • 1970-01-01
        • 2018-07-10
        • 2017-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多