1. 程式人生 > >RecyclerView 區域性重新整理(視覺)延遲問題

RecyclerView 區域性重新整理(視覺)延遲問題

今天在用RecyclerView的重新整理方法時,為了避免RecyclerView.Adapter 的 notifyDataSetChanged 方法會通知 RecyclerView 重新整理全部的可見列表項,於是使 用

RecyclerView.Adapter 的notifyItemChanged(int) 方法,只區域性重新整理修改資料。問題由此而來,下面描述一下問題情況,看下圖:


注意仔細看效果,我修改的是Crime #5,看出什麼了嗎? 感覺有延遲啊   退出來半天了,才真正重新整理介面。

程式碼就是簡單的一句:

mAdapter.notifyItemChanged(position);

對於一個對自己有要求的程式猿,堅決不能忍受這樣的效果。

可是這裡邊說的圖片閃爍貌似不是我的問題,不過在這個啟發下,我翻到了notifyItemChanged(…)的原始碼,打算自己一探究竟。

以下只針對本文說的問題來考慮,不考慮其他需求(如判斷item是否可見範圍)。

notifyItemChanged(position)呼叫的是mObservable.notifyItemRangeChanged(position, 1);

即最終與notifyItemRangeChanged(positionStart, itemCount)方法呼叫了同一個方法

按照該方法的解釋,前面的positionStart引數是【Position of the first item that has changed】,即所有改變的item中的第一條的位置,

後面的itemCount代表的是【itemCount Number of items that have changed】,即所有改變的item數目。

這兩個方法最終呼叫的是:


第三個引數 null 所佔位置代表的是【Optional parameter, use null to identify a "full" update】,即這是一個可選引數,傳入null來標誌一個“完整的”更新,即全部重新整理。

看到這裡我試著在最開始的  mAdapter.notifyItemChanged(position);呼叫處增加一個引數,傳入一個“0”,程式碼如下:

 mAdapter.notifyItemChanged(position,0);

然後再執行,發現問題竟然沒有了,上個圖:


對程式執行跟蹤發現,呼叫方法為:

那麼說到這裡到底payload是幹嘛的呢?

又是一番搜尋。。但是沒有找到最終原因,之前的參考一葉漂舟的文章http://blog.csdn.net/jdsjlzx/article/details/52893469也沒有說這個payload引數到底是幹嘛。。

於是先放一放吧,解決問題要緊。

相關推薦

RecyclerView 區域性重新整理視覺延遲問題

今天在用RecyclerView的重新整理方法時,為了避免RecyclerView.Adapter 的 notifyDataSetChanged 方法會通知 RecyclerView 重新整理全部的可見列表項,於是使 用 RecyclerView.Adapter 的noti

Android ListView優化之區域性重新整理更新非notifyDataSetChanged

在Android開發中我們經常會用到listview的資料和介面重新整理動作,我們每次可能會用到的都是Adapter.notifyDataSetChanged()方法。這個方法的原理是利用觀察者模式對我們的資料來源進行監聽,當我們的資料來源發生變化

ajax實現分頁的區域性重新整理基於Jeesite框架

因為jeesite框架帶的分頁實現它的重新整理是整個jsp頁面的重新整理,所以這一點就很苦惱。下面我用ajax來解決這個問題。 點選分頁時觸發ajax事件,將後臺需要的引數通過ajax傳過去,然後後臺返回的資料再ajax裡畫的html部分顯示出來,主意你需要重新整理拿個部分

Android RecyclerView (四)總結-並且實現下拉重新整理資料,上拉載入資料功能

我們使用的程式碼還是為以前文章寫的。 這一次我們主要實現的是下拉重新整理資料,和上拉載入資料,這裡我都用Thread.sleep(xxx)的方法來模擬獲取資料等待。 首先我們下拉重新整理的時候要用到: SwipeRefreshLayout 來看一下如何在

RecyclerView的使用4之下拉重新整理和上拉載入

這篇介紹下如何為RecyclerView新增下拉重新整理和上拉載入,過去在ListView當中新增下拉重新整理和上拉載入是非常方便的利用addHeaderView和addFooterView,RecyclerView的重新整理同樣也是需要靠List當中新增H

利用ajax和JSP技術實現網頁中表單的區域性重新整理重新整理表單資料,而不重新整理整個頁面

在web開發中有時有區域性重新整理的需求,這樣做的好處是克服了頁面整體重新整理對網路速度受限的情況。 1.MySQL資料表如下(簡單舉例): 表名:stu_info stuId                 int                    PK    NN

RecyclerView的使用1之HelloWorld

prot pub lines isa osi -s pri 構造函數 java 原創文章。轉載請註明 http://blog.csdn.net/leejizhou/article/details/50670657 RecyclerView是伴隨Andr

Golang入門教程十三延遲函數defer詳解

它的 ref lang back 教程 執行順序 ont 例子 返回值 前言   大家都知道go語言的defer功能很強大,對於資源管理非常方便,但是如果沒用好,也會有陷阱哦。Go 語言中延遲函數 defer 充當著 try...catch 的重任,使用起來也非常簡便,然而

【移動開發】關於一對一視訊交友直播延遲優化

6 月底釋出了一個針對視訊直播的實時流網路 LiveNet 和完整的直播雲解決方案,很多開發者對這個網路和解決方案的細節和使用場景非常感興趣。 結合實時流網路 LiveNet 和直播雲解決方案的實踐,我們用一系列文章,更系統化地介紹當下大熱的視訊直播各環節的關鍵技術,幫助視訊直播創業者們更全面、深入地瞭解視

Material Design 實戰 之第五彈 —— 下拉重新整理SwipeRefreshLayout

本模組共有六篇文章,參考郭神的《第一行程式碼》,對Material Design的學習做一個詳細的筆記,大家可以一起交流一下: Material Design 實戰 之第一彈——Toolbar(即本文) Material Design 實戰 之第二彈——滑動選

安卓開發:RecyclerView的使用

其實我以前也有一個每天聊到深夜的人。   檢視文章: 安卓開發:RecyclerView的使用(一) 安卓開發:RecyclerView的使用(二) 安卓開發:RecyclerView的使用(三) RecyclerView的點選事件

安卓開發:RecyclerView的使用

如果你越來越冷漠,你以為你成長了,但其實沒有。長大應該是變得溫柔,對全世界都溫柔。 檢視文章: 安卓開發:RecyclerView的使用(一) 安卓開發:RecyclerView的使用(二) 安卓開發:RecyclerView的使用(三) Re

安卓開發:RecyclerView的使用

“走路要牽著我呀 小時候老師沒有跟你說過貴重物品要隨身攜帶嗎” 檢視文章: 安卓開發:RecyclerView的使用(一) 安卓開發:RecyclerView的使用(二) 安卓開發:RecyclerView的使用(三) RecyclerView

MyBatis8延遲載入&快取

什麼是延遲載入? resultMap可以實現高階對映,association,collection具有延遲載入的功能。 當我們需要查詢某個資訊的時候,再去查詢,達到按需查詢,就是延遲載入 可以大大提高資料庫的效能 那麼我們程式碼擼起來把: 延遲載入我們首先要在全域性配置檔案中開啟: SQlMapCon

Mybatis 學習筆記——延遲載入

一、延遲載入介紹   延遲載入的目的是為了加快查詢速度,提升資料庫效能。對於一個複雜的查詢sql,在業務許可的情況下,我們可以用兩種方式來提升查詢速度(Mybatis環境),讓資料庫的效能蹭蹭的往上提升。第一種是將這個複查查詢分成兩個 statement 先執行

Android RecyclerView ItemDecoration timeline

package zhangphil.book; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Pain

影象區域性特徵--概述

本文根據下面這篇文章,做下簡單修改。 原文: 研究影象特徵檢測已經有一段時間了,影象特徵檢測的方法很多,又加上各種演算法的變形,所以難以在短時間內全面的瞭解,只是對主流的特徵檢測演算法的原理進行了學習。總體來說,影象特徵可以包括顏色特徵、紋理特等、形狀特徵以及區域

Android RecyclerView 詳解 RecyclerView分割線的使用和分割線樣式

package com.lw.myrecyclerview; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphi

Mybatis學習————— 延遲載入和快取機制(一級二級快取)

一、延遲載入     延遲載入就是懶載入,先去查詢主表資訊,如果用到從表的資料的話,再去查詢從表的資訊,也就是如果沒用到從表的資料的話,就不查詢從表的資訊。所以這就是突出了懶這個特點。真是懶啊。     Mybatis中resultMap可以實現延遲載入     1.1、查詢訂單資訊,延遲載入使用者資訊

Android recyclerview原始碼分析

原始碼分析基於22.2.1版本 先預覽一下recyclerview 相關的類   今天先分析SortedList 和SortedListAdapterCallback 先看下這兩個類的用法  SortedList<Object> mDataList=new