小编phi*_*ppe的帖子

RecyclerView.Adapter.notifyItemChanged()永远不会将有效负载传递给onBindViewHolder()

我试图ViewHolderRecyclerView没有重新绑定整个事情的情况下更新a .根据文档,我应该通过调用来执行此操作RecyclerView.Adapter.notifyItemChanged(int position, Object payload),其中payload是一个将传递给的任意对象RecyclerView.Adapter.onBindViewHolder(VH holder, int position, List<Object> payloads),在那里我将能够更新ViewHolder.

但是当我尝试这个时,onBindViewHolder总是收到一个空列表.在这两个调用之间,内部有效负载列表被清除.在RecyclerView的源代码中设置断点后,会发生这种情况,因为重新布局会最终调用RecyclerView.ViewHolder.clearPayload()

有没有其他人设法让这个工作?这是支持库中的错误还是我在触发这两个函数之间的重新布局时所做的事情?

这是清除有效负载时的堆栈跟踪:

"<1> main@831692616832" prio=5 runnable
  java.lang.Thread.State: RUNNABLE
      at android.support.v7.widget.RecyclerView$ViewHolder.clearPayload(RecyclerView.java:8524)
      at android.support.v7.widget.RecyclerView$ViewHolder.resetInternal(RecyclerView.java:8553)
      at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4544)
      at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4461)
      at android.support.v7.widget.LayoutState.next(LayoutState.java:86)
      at android.support.v7.widget.StaggeredGridLayoutManager.fill(StaggeredGridLayoutManager.java:1423)
      at android.support.v7.widget.StaggeredGridLayoutManager.onLayoutChildren(StaggeredGridLayoutManager.java:610)
      at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2847)
      at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3145)
      at android.view.View.layout(View.java:14289)
      at android.view.ViewGroup.layout(ViewGroup.java:4562)
      at android.support.v4.widget.SwipeRefreshLayout.onLayout(SwipeRefreshLayout.java:581)
      at android.view.View.layout(View.java:14289)
      at android.view.ViewGroup.layout(ViewGroup.java:4562)
      at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
      at android.view.View.layout(View.java:14289)
      at android.view.ViewGroup.layout(ViewGroup.java:4562)
      at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
      at android.view.View.layout(View.java:14289)
      at android.view.ViewGroup.layout(ViewGroup.java:4562)
      at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
      at android.view.View.layout(View.java:14289)
      at android.view.ViewGroup.layout(ViewGroup.java:4562)
      at android.widget.FrameLayout.onLayout(FrameLayout.java:448) …
Run Code Online (Sandbox Code Playgroud)

android android-adapter android-support-library android-recyclerview

26
推荐指数
2
解决办法
2万
查看次数